spring-注解开发
一.注解实现自动装配
jdk 1.5开始支持注解,spring 2.5 开始支持注解!
要使用注解须知:
1.导入约束
xmlns:context="http://www.springframework.org/schema/context"
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
2.配置注解的支持
<context:annotation-config/>
完整的spring的xml
<?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.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <context:annotation-config/> </beans>
第一个spring注解:@Autowired
直接在属性上使用的即可!也可以在set方法上使用!
使用Autowried 我们可以不用编写set方法,前提是你这个自动装配的属性的IOC(spring)容器中存在,且符合名字byName
科普:
@Nullable 字段标记了的这个注解,说明这个字段可以为null
//如果显示的定义了Autowired的required的属性为 false,说明这个对象可以为null,否则不允许为空(切记:是值为空,不是bean中没有配置)
@Autowired(required = false)
private Cat cat;
第二个spring注解:@Qualifier(value = " ")
指定唯一一个bean对象注入
@Autowired
@Qualifier(value = "dog1")
private Dog dog;
第三个注解,它隶属于Java:@Resource
它更像是 spring 中的 @Autowired 和 @Qualifier 的结合体,使用方便,但是性能不如后者
@Resource(name = "dog1")
private Dog dog;
总结:@Resource 和 @Autowried 的区别
- 都是用来自动装配的,都可以放在属性字段上
- @Autowired 通过byName 的方式实现,而且必须要求这个对象名字存在且唯一
- @Rescource 默认通过byName的方式实现,如果找不到名字,则通过byType实现,两个都找不到,则报错
二.使用注解开发
在spring4之后,要使用注解开发,必须要保证aop的包导入了
使用注解需要导入context约束,增加注解的支持!
@Componet:组件,放在类上,说明这个类被spring 管理了,就是bean
1.bean
Component 组件
此注解等价于 <bean id="user" class="top.lostyou.dao.User"/>
2.属性如何注入
@Value("ceshi")
等价于
<property name="name" value="csshi"/>
3.衍生的注解
@Componet 有几个衍生注解,我们在web开发的时候,会按照mvc三层架构分层
- dao 【@Repository】
- service 【@Service】
- controller 【@Controller】
这四个注解本质是一样的,都是代表将某个类注册到spring容器中,装配bean。
4.作用域
@Scope("singleton")
标识此类为单例模式
5.总结
xml与注解:
- xml更加万能,适用于任何场合!维护简单方便
- 注解 不是自己类使用不了,维护相对复杂
xml与注解的最佳实现:
- xml用来管理bean
- 注解用来完成属性的注入
- 我们在使用过程中只要注意一个问题:必须要让注解生效,就需要开启注解支持
<!-- 自动扫描文件下的包,只有被扫描的包才会生效 --> <context:component-scan base-package="top.lostyou"/> <context:annotation-config/>