您的位置:首页 > 编程语言 > Java开发

Spring通过注解管理控制反转(IOC)和注入(DI)

2019-01-03 20:19 567 查看
版权声明: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

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: