1. 针对配置文件管理的类太多造成配置文件过大的问题,在Spring2.5以后可以结合JAVA注解减少配置文件的配置代码。
2. Spring自动管理类的注解有以下四种:
- @Service:用来标注业务逻辑层中的类
- @Controller:标注控制层中的类,如Struts中的Action
- @Repository:标注数据访问层中的类,即我们的DAO层
- @Component:这是一个能用标注,可以标注任何类,但通常我们用来标不属于以上三层中的类
3. 要实现Spring自动管理类对象首先要修改配置文件,加入相应的命名空间:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd">
<context:component-scan base-package="com.myproject"/>
</beans>
以上红色部分是新增加的部分,context标签指定了由Spring自动管理的基本包,它会自动扫描这个包下面的所有子包中的类中是否包含有相应的标注,如果有就会自动管理"com.myproject"这个包下面的所有的子包里面所有类。
4. 在以上四种标注中我们可以为这些标注指定一些参数,或者结合一些其它的标注,来实现与传统配置一样的功能:
- 默认情况下,如果标注不指定名称,那么在调用getBean("beanName")方法时,我们指定的beanName应该为该类的类名把第一个字母小写后的名称。如果要使用自定义的名称来获取相应类的实例,可以在标注中进行指定,例如:@Service("user"),这样就可以把user作为beanName来获取相应的类的实例了;
- 默认情况下,所有通过getBean("beanName")方法获得的实例都是singleton单例,如果要改变它可以通过使用标注@Scope("prototype")来进行修改,可以用singleton,prototype,request,session这四种作用域范围;
- 指定实例化以后执行的方法,可以在类相应的方法中加入@PostConstruct标注;
- 指定上下文对象调用close()方法后执行的方法,可以在类相应的方法中加入@PreDestroy标注;