今天针对Spring框架中的注解注入操作进行学习,学习内容如下:
1.在类上的注解
@Component
代表是Spring容器中的组件,具有一个value属性,用于设置组件的id
@Service
也代表是Spring容器中的组件,常用于Service层,value属性与Component一致
@Repository
也代表是Spring容器中的组件,常用于持久层(DAO),value属性与Component一致
@Controller
也代表是Spring容器中的组件,常用于Control层,value属性与Component一致
2.在属性上的注解
@Value:主要是在应用在基本数据类型和字符串上的赋值,有一个value属性,是String类型
@Value("王五") private String name ; @Value("20") private int age ;可以在applicationContext.xml文件时,引入properties文件来配置,集中管理数据
<context:property-placeholder location="classpath:config.properties"> </context:property-placeholder>@Value("${bean.name}") private String name ; @Value("20") private int age ;@AutoWired
引用类型注入,支持byName,byType。默认情况,使用byType自动注入,如果要使用byName的方式进行注入则需要用到@Qualifier标签进行指定id,且一般情况下更推荐@AutoWired用于构造方法
@Autowired public Student(@Qualifier("tea") Teacher teacher,@Value("小芳") String name) { this.teacher = teacher; this.name = name; }这里面的情况下,需要把@Qualifier放在参数列表中;
@Resource
是由jdk提供的注解,并且在较高版本的jdk已经将他移除标准库了,也是自动注入处理,但是默认是byName,如果说ByName失败就自动转为ByType
区别:
@AutoWired默认情况下是按类型装配,要求依赖对象必须存在,不存在则出现空指针异常,但是可以通过属性required=false,则可以为空。如果需要byName装配,则结合@Qualifier注解一起使用。
@Resource默认情况下,使用byName装配,当找不到名称匹配的bean,再使用byType装配。有一个name属性,作为byName装配的名称,还有type属性,作为byType装配的名称。
使用@AutoWired做注入时,会产生一个警告,并建议使用构造方法注入;
3.多文件配置
可以创建多个xml文件,比如说有service.xml和repository.xml然后可以在一个汇总的xml文件比如说
main.xml文件中,通过import标签进行配置,然后在容器入口导入总的main.xml的参数就好了
<!--直接写文件名的引用--> <!-- <import resource="classpath:springConfig/applicationContext_dao .xml"></import> <import resource="classpath:springConfig/applicationContext_service .xml"></import>-- > <!--使用通配符的引用--> <import resource="classpath:springConfig/applicationContext_*.xml ">