IOC注解使用方法
一、bean类型注解
第一步:在xml文件中配置context:component-scan
第二步:在类上添加componet注解,component注解衍生出controller、service、repository
一般情况下:
1、controller添加在展示层的controller上
2、service添加在服务层的service上
3、repository添加在持久层的dao上
二、类注解
1、@ Autowired
@Autowired默认按类型装配(byType),
@Autowired是由AutowiredAnnotationBeanPostProcessor类实现
@Autowired是spring自带的注解
@Autowired默认情况下要求依赖对象必须存在,如果需要允许null值,可以设置它的required属性为false,如:@Autowired(required=false)
如果我们想按名称装配(byName)可以结合 @Qualifier 注解进行使用
@Qualifier在自动按照类型注入的基础之上,再按照 Bean 的 id 注入。它在给字段注入时不能独立使用,必须和@Autowire 一起使用;但是给方法参数注入时,可以独立使用。
2、@Resource
@Resource默认按名称装配(byName),可以通过@Resource的name属性指定名称,如果没有指定name属性,当注解写在字段上时,默认取字段名进行按照名称查找,当找不到与名称匹配的bean时才按照类型进行装配。
@Resource属于J2EE JSR250规范的实现,但是需要注意的是,如果name属性一旦指定,就只会按照名称进行装配。
推荐使用@Resource注解,因为它是属于J2EE的,减少了与spring的耦合。这样代码看起就比较优雅。
3、@Inject
@Inject是根据类型进行自动装配的,如果需要按名称进行装配,则需要配合@Named;
@Inject是JSR330中的规范,需要导入javax.inject.Inject;实现注入。
@Inject可以作用在变量、setter方法、构造函数上。
4、@Value
给基本类型和String类型注入值
可以使用占位符获取属性文件中的值。
三、@Autowired、@Resource、@Inject区别
1. @Autowired是spring自带的,@Inject是JSR330规范实现的,@Resource是JSR250规范实现的,需要导入不
同的包
2. @Autowired、@Inject用法基本一样,不同的是@Autowired有一个request属性
3. @Autowired、@Inject是默认按照类型匹配的,@Resource是按照名称匹配的
4. @Autowired如果需要按照名称匹配需要和@Qualifier一起使用,@Inject和@Name一起使用
改变Bean作用范围的注解
@Scope:指定 bean 的作用范围,相当于下面的配置:<bean id="" class="" scope="">
value:指定范围的值。取值:singleton prototype request session globalsession
属性:
@Value(“${name}”)//name是properties文件中的key
四、生命周期相关注解
@PostConstruct
@PreDestroy
相当于:<bean id="" class="" init-method="" destroy-method="" />
关于注解和XML的选择问题
注解的优势:
配置简单,维护方便(我们找到类,就相当于找到了对应的配置)。
XML 的优势:
修改时,不用改源码。不涉及重新编译和部署。
五、配置文件注解
@Configuration
相当于spring的XML配置文件。
从Spring3.0开始可以使用@Configuration定义配置类,可替换xml配置文件
配置类内部包含有一个或多个被@Bean注解的方法,这些方法将会被AnnotationConfigApplicationContext或
AnnotationConfigWebApplicationContext类进行扫描,并用于构建bean定义对象,初始化Spring容器
@Bean
相当于<bean>标签
作用为:注册bean对象,主要用来配置非自定义的bean,比如DruidDataSource、SqlSessionFactory
@Bean标注在方法上(返回某个实例的方法)
@Bean注解默认作用域为单例singleton作用域,可通过@Scope(“prototype”)设置为原型作用域;
@ComponentScan
相当于context:component-scan标签
组件扫描器,扫描@Component、@Controller、@Service、@Repository注解的类。
该注解是编写在类上面的,一般配合@Configuration注解一起使用。
@PropertySource
相当于context:property-placeholder标签
编写在类上面,作用是加载properties配置文件
value[]:用于指定properties文件路径,如果在类路径下,需要写上classpath
@Import
相当于spring配置文件中的<import>标签
用来组合多个配置类,在引入其他配置类时,可以不用再写@Configuration 注解。当然,写上也没问题