SpringAnnotation注解之@Autowired
来源:互联网 发布:sql注入绕过 concat 0x 编辑:程序博客网 时间:2024/06/12 20:49
@Autowired
public
void
setUserDao(UserDao userDao) {
this
.userDao = userDao;
}
Autowired:表示spring会在容器里找跟setUserDao(UserDao userDao)这里面的参数相同类型的bean,然后给注入进来。
例如:原来用XML方式的写法
<
bean
id
=
"userDaoImpl"
class
=
"com.fz.annotation.dao.impl.UserDaoImpl"
>
</
bean
>
<
bean
id
=
"userService"
class
=
"com.fz.xml.service.UserService"
>
<
property
name
=
"userDao"
ref
=
"userDaoImpl"
></
property
>
</
bean
>
这里我们需要写一个<property name="userDao" ref="userDaoImpl"></property>来给bean注入属性。使用了annotation之后呢,就可以不用这样写
了。直接去掉<property>属性
<
bean
id
=
"userDaoImpl"
class
=
"com.fz.annotation.dao.impl.UserDaoImpl"
>
</
bean
>
<
bean
id
=
"userService"
class
=
"com.fz.xml.service.UserService"
>
</
bean
>
然后在userService里的userDao的set方法上加入@Autowired即可
现在测试:控制台打印出userDaoImpl里的User add.....信息,表示userDao已经获取到
@Test
public
void
getProperties(){
ClassPathXmlApplicationContext ctx =
new
ClassPathXmlApplicationContext(
"applicationContext_annotation.xml"
);
UserService userService = (UserService) ctx.getBean(
"userService"
);
userService.userAdd();
}
通过测试,可以看出。@Autowired是根据set方法里的bean的类型来去容器里找相应类型的bean,也就是使用了byType
假如现在我们配置两个相同类型的userDaoImpl
<bean id=
"userDaoImpl"
class
=
"com.fz.annotation.dao.impl.UserDaoImpl"
>
</bean>
<bean id=
"userDaoImpl1"
class
=
"com.fz.annotation.dao.impl.UserDaoImpl"
>
</bean>
<bean id=
"userService"
class
=
"com.fz.annotation.service.UserService"
>
</bean>
此时测试的时候将会报错:expected single matching bean but found 2。
但是,假如实际开发中我们就需要两个类型相同的bean呢?可以加上@Qualifier("userDaoImpl")
@Autowired
public
void
setUserDao(
@Qualifier
(
"userDaoImpl"
)UserDao userDao) {
this
.userDao = userDao;
}
@Qualifier
(
"userDaoImpl"
):表示使用名字为userDaoImpl的bean来进行注入,现在测试的话同样没问题。
也可以写在Autowired之后
@Autowired
@Qualifier("userDaoImpl")
public void setUserDao(UserDao userDao)
总结:
1、@Autowired可以放在属性上,任意方法上,建议放在属性的set方法上。
2、@Autowired默认是按byType来查找bean的,如果找到多个同一类型的bean,则会报错
3、如果想按byName来查找bean,那就@Autowired和@Qualifier结合使用:
@Qualifier
(
"userDaoImpl"
):表示使用名字为userDaoImpl的bean来进行注入
- SpringAnnotation注解之@Autowired
- SpringAnnotation注解之@Resource
- SpringAnnotation注解之@PreDestroy,@PostConstruct,@Scope
- SpringAnnotation注解之@Component,@Repository,@Service,@Controller
- SpringAnnotation之配置AnnotationXML文件
- @Autowired注解
- @Autowired注解
- 注解@AutoWired
- @Autowired注解
- spring之注解(二)Autowired
- Spring注解之自动注入Autowired
- 浅谈spring 注解之@Autowired 与@Resource
- 【spring教程之九】spring注解@Autowired自动装配
- Spring最小化xml配置二之注解方式@Autowired
- Spring Bean装配之Autowired注解说明-1
- Spring Bean装配之Autowired注解说明-2
- Spring Bean装配之Autowired注解说明-3
- Spring之注解 @Autowired 注释与@Resource注释的区别
- SpringXML方式给bean初始化属性值
- SpringAnnotation注解之@PreDestroy,@PostConstruct,@Scope
- SpringAnnotation注解之@Component,@Repository,@Service,@Controller
- SpringAnnotation注解之@Resource
- hduoj 2030统计汉字
- SpringAnnotation注解之@Autowired
- SpringAnnotation之配置AnnotationXML文件
- Spring的AOP介绍
- js--数据结构--链表
- HBase Java简单示例
- Annotation方式实现AOP
- AOP的Advice
- 翻硬币(搜索)
- XML方式实现Spring的AOP