文章目录
@Configuration
作用
- 用来定义配置类,可以替换xml配置文件
- 被注解的类中含有一个或多个被@Bean注解的方法,这些方法会被AnnotationConfigApplicationContext或AnnotationConfigWebApplicationContext类进行扫描,并用于构建bean实例,初始化Spring容器
注意事项(@Configuration注解的类相关)
- 该类不能是final类型
- 该类不可以是匿名类
- @Configuration嵌套时,嵌套的configuration必须是静态类
使用方式
-
@Configuration配置spring并启动spring容器
配置类
编写启动类
容器启动
-
@Configuration+@ComponetScan +@Componet扫描包路径,添加路径下需要创建的bean实例到Spring容器
配置类
需要注入的类
启动类
运行结果
-
@Configuration启动容器+@Bean注册Bean
配置类
编写注入对象TestBean
编写启动类
测试结果
@Componet @Controller @Service @Repository
- @Componet是一个标准的spring Bean类,声明当前类的对象被spring托管,spring会创建该类的实例并存放在IOC容器中
- @Controller @Service @Repository都是@Componet的子类
- @Controller 标注一个控制器组件类
- @Service 标注一个业务逻辑组件类
- @Repository 标注一个DAO组件类
- @Componet可以替代上述三个注解
- 尽量使用@Controller @Service @Repository来代替@Componet,因为语义性更强,便于后续的维护和开发
- 上述注解都有一个属性value用来声明Bean实例的id,如果不声明,则默认是该类的类名称首字母小写
@Bean @Qualifier @Scope
- Bean注解主要用于方法上,类似于工厂方法
- 搭配@Qualifier注解定义工厂方法的名称,完成类之间的依赖关系
- @Scope定义了该Bean的作用域范围,是Singleton还是Prototype
@ComponentScan
- @ComponetScan会自动扫描声明的包路径,创建路径下需要创建的实例Componet,Controller,Service,Repository到Spring容器中
@Autowired @Resource
相同点
- @Resource相当于@Autowired,均完成了自动装配,注入Bean实例到Spring容器中
- 均可标注在字段或属性的setter方法上
不同点
-
提供方:
@Autowired是由Spring提供的
@Resource是由J2EE提供的,需要JDK1.6及以上 -
注入方式
@Autowired只按照类型注入,如果想要其按照id装配,需配合@Qualifier使用
@Resource默认按id自动装配,也提供按照类型注入 -
属性
@Autowired按类型装配依赖对象,默认情况下,要求依赖对象必须存在,如果允许null值,可以设置属性required为false
@Resource有两个重要属性:name和type
name属性指定id,如果没有指定name属性,当注解标注在字段上时,默认取字段的名称作为Bean id寻找依赖对象,当注解标注在属性的setter方法上时,默认取属性名作为Bean id寻找依赖对象
@Resource的注意事项
Resource如果没有指定name属性,并且按照默认的名称无法找到依赖对象时。@Resource注解会回退到按类型装配
推荐使用@Resource注解在字段上,这样就不用写setter方法了,并且这个注解时属于J2EE的,减少了与Spring的耦合,这样代码比较 优雅(被优雅支配的程序员,不得不给优雅标红)