Bean属性依赖注入

1、简单数据类型依赖注入(了解)
@Service
public class CustomerServiceImpl implements CustomerService {
	// 简单类型的成员变量
	@Value("Rose") // 参数的值简单类型
	private String name = "Jack";
	@Override
	public void saveCustomer() {
		System.out.println("service:保存客户信息");
		System.out.println("name:" + name);
	}
}

2、复杂类型数据依赖注入
(1)使用@value结合spEL完成
#{要注入的bean名称}
@Value("#{customerDaoImpl}")
//这里的Dao使用@Repository标注过的
private CustomerDao	customerDao;private CustomerDao	customerDao;
@Value("#{customerDaoImpl}")
public void setCustomerDao(CustomerDao customerDao) {
	this.customerDao = customerDao;
}
或
从配置文件中读取信息注入到Bean中
<util:properties id="ds" location="/WEB-INF/ds.properties"/>
driverClass=oracle.jdbc.driver.OracleDriver
jdbcUrl=jdbc:oracle:thin:@127.0.0.1:1521:ORCL
user=SYSTEM
password=SYSTEM
@Component
public class JDBCDataSource {
	@Value("#{ds.driverClass}")
	private String	driverClass;
	@Value("#{ds.jdbcUrl}")
	private String	jdbcUrl;
	@Value("#{ds.user}")
	private String	user;
	@Value("#{ds.password}")
	private String	password;
}2)使用@Autowired注解
① @Autowired默认根据类型来匹配
② 标注@Autowired的bean,如果在启动时没有找到匹配的bean会报错,可以加required=false来避免
③ 标注@Autowired的bean,如果在启动时没有找到多个类型匹配的bean会报错
④ 如果要@Autowired根据名字匹配,可以和@Qualifier注解联合使用
@Autowired
	@Qualifier("userDao")
	private UserDao	userDao;
		@Autowired
		@Qualifier("userDao")
		public void setUserDao(UserDao userDao) {

			this.userDao = userDao;
	}
		@Autowired
		public void setUserDao(@Qualifier("userDao") UserDao userDao) {
			this.userDao = userDao;
		}3)使用@Resource注解
默认根据名称匹配,然后才根据类型匹配(匹配规则:要注入的属性名=bean名称)
@Service
public class UserDaoImpl implements UserDao
	@javax.annotation.Resource
	private UserDao	userDao;
@Service
public class UserDaoImpl implements UserDao
	@javax.annotation.Resource(name = "userDaoImpl")
	private UserDao	userDao;
@javax.annotation.Resource(name = "userDaoImpl")
public void setUserDao(UserDao userDao) {
	this.userDao = userDao;
}
如果此时再去建一个bean,也实现UserDao接口,此时,再两个类的service注解上都不去指定名称,看会发生什么情况,此时会报错!解决办法,在注入时指定名称
	@javax.annotation.Resource(name = "userDaoImpl")
private UserDao	userDao;4)使用Inject注解(需要导入jar,一般不用)
需要先导入 javax.inject 的 jar 
使用@Inject注解,则按照类型注入,
    //第四种: JSR-330标准(jdk) 提供 @Inject ,配合@Named注解
	@Inject//默认按照类型注入
	private CustomerDao customerDao;
    使用@inject@Named注解,则按照名称注入
    //第四种: JSR-330标准(jdk) 提供 @Inject ,配合@Named注解
	@Inject//默认按照类型注入
	@Named("customerDao")//按照名字注入,必须配合@Inject使用
	private CustomerDao customerDao;


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值