老的EJP网页开发模式中,会牵扯到大量的xml配置,以至于开发员的项目维护成本较高。于是IOC技术也应运而生。说到IOC(控制反转),简单的说就是 通过 配置来创建对象,而不是通过代码来创建。而Spring则是这个技术的比较流行的框架之一。下面来介绍下Spring框架的IOC运用实例。
1. 早期的Spring框架是通过XML配置文件来创建对象,类似于下面的代码:
// 定义Spring配置文件的路径
String xmlPath = "applicationContext.xml";
// 初始化Spring容器,加载配置文件
ApplicationContext applicationContext = new ClassPathXmlApplicationContext(xmlPath);
// 通过容器获取personDao实例
PersonDao personDao = (PersonDao) applicationContext.getBean("personDao");
// 调用 personDao 的 add ()方法
personDao.add();
applicationContext.xml里面可以增加一系列需要IOC创建的bean,定义bean的创建细节;另外也可以在里面自动scan包名下的所有的对象注入到bean中。
2. 最新的Spring框架 已经做到了IOC的零配置。所谓零配置,就是不需要xml配置文件,完全通过在java文件中添加注解就可以做到 通过加载配置的方式生成对象。
零配置的步骤如下:
1. 为目标类添加上@component, ( 即对应着xml中的<bean id=xxxx> )
2. 在相同目录下创建JavaConfig(类名随意),为该类添加@ComponentScan的注解。(即对应着xml中的<context:component-scan base-package="包名"/>)
3. 测试程序通过AnnotationConfigApplicationContext来获取到bean对象,典型代码如下:
ApplicationContext applicationContext = new AnnotationConfigApplicationContext(JavaConfig.class);
People people = applicationContext.getBean(People.class);
people.work();
执行后打印study
以上即一个极简的例子,来体验零配置生成bean的过程。
Spring Boot的一些常用Component,现将它们的介绍拷贝如下:
1)@Component
可以使用此注解描述 Spring 中的 Bean,但它是一个泛化的概念,仅仅表示一个组件(Bean),并且可以作用在任何层次。使用时只需将该注解标注在相应类上即可。
2)@Repository
用于将数据访问层(DAO层)的类标识为 Spring 中的 Bean,其功能与 @Component 相同。
3)@Service
通常作用在业务层(Service 层),用于将业务层的类标识为 Spring 中的 Bean,其功能与 @Component 相同。
4)@Controller
通常作用在控制层(如 Struts2 的 Action),用于将控制层的类标识为 Spring 中的 Bean,其功能与 @Component 相同。