版权声明:Arno https://blog.csdn.net/yu342107056/article/details/85717522
spring中的注解用法
1.注解的依赖注入di
在spring的xml中用
<property name="" ref=""> <!-- setter方式注入-->
<constructor index="" ref=""/><!--用构造函数方式注入-->
在spring的annotation注解中 :
<property name="" ref=""> <!-- setter方式注入-->
<constructor index="" ref=""/><!-- 用构造函数方式注入没有相应的注解-->
setter方式注入被替换成
@Resource
@Autowired @Qualifier
@Inject @Named
前提:需要在XML文件中添加
<!-- 用来解析@Resource注解@AutoWired@Inject注解 -->
<context:annotation-config></context:annotation-config>
@Resource注解: 属于j2EE规范
//name="userDao" 拿name的值userDao作为对象的名字去spring容器中寻找,有就注入
@Resource(name="userDao")
private UserDao userDao;
//@Resource中没有写name属性,拿属性的名字userDao 去spring容器中寻找,有就注入
@Resource
private UserDao userDao;
//有name就直接匹配name的值,如果匹配不上拿属性名称寻找,如果属性名称找不到按类型匹配
@Resource
private UserDao userDao111;
@Autowired注解:属于spring的规范
//用属性名称userDao去spring的容器中寻找,如果有就注入
@Autowired
private UserDao userDao;
//用属性名称userDao111去spring的容器中寻找,如果没有就按类型匹配,在spring容器中不能有多个相同类型的对象
@Autowired
private UserDao userDao111;
//精确按照名称注入,如果名称不匹配就报异常,不会用类型注入
@Autowired@Qualifier("userDao")//精确按照名称注入,
private UserDao userDao;
@Inject @Named注解,此注解必须依赖jsr-330.jar,基本不会有人用。
1.注解的ioc
在spring的xml中用
<bean id="" class="包名.类名">
在sring的annotation注解中
<bean id="" class="包名.类名">
被替换成
@Controller v
@Service
@Repository
@Component
前提:需要在XML文件中添加
<!-- 用来解析@Controller @Service @Respoitory @Component 注解
还能解析@Resource @Autowired @Inject
base-package="包名",多个包名用逗号间隔
如果写了<ontext:component-scan 就不用写<context:annotation-config>
因为在<ontext:component-scan已经包含了<context:annotation-config>
-->
<context:component-scan base-package="com.arno.dao"></context:component-scan>
<context:component-scan base-package="com.arno.service"></context:component-scan>
@Controller 修饰在controller类上
@Service 修饰在业务的类上
@Repository 修饰在dao的类上
@Component 无法归controller和service和dao类别中
@Component 可以用来替换@Service和@Repository无法替换@Controller