属性使用注解注入的方式注入值的好处是可以不用提供set方法,也不需要在配置文件中添加值.
所涉及的jar包参考第九篇文章
基本数据类型注入
对于基本数据类型的值使用 @Value注解,例如:
package blog.csdn.net.mchenys.dao;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Repository;
@Repository(value="userDao")
public class UserDaoImpl implements UserDao {
@Value(value="Chenys")
private String username;
@Override
public void saveUser() {
System.out.println("保存成功...username="+username);
}
}
测试
@Test
public void test2() {
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
UserDao ud = (UserDao) context.getBean("userDao");
ud.saveUser();
}
引用类型数据注入
有2种注解注入方式,第一种是使用Spring提供的注解
@Autowired :默认按类型进行自动装配(缺点是如果有多个实现类,无法确认到底是那个实现类被注入了)
@Qualifier:配合@Autowired一起使用,弥补自动装配的缺点,这个可以通过value属性指定查找的名称
例如:
package blog.csdn.net.mchenys.domain;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Repository;
/**
* 目标类需要先用注解声明
* @author mChenys
*
*/
@Repository
public class User {
//注解注入属性值,可以不用提供set方法
@Value(value = "zhangsan")
private String username;
@Value(value = "23")
private int age;
public String getUsername() {
return username;
}
public int getAge() {
return age;
}
}
package blog.csdn.net.mchenys.dao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Repository;
import blog.csdn.net.mchenys.domain.User;
@Repository(value = "userDao")
public class UserDaoImpl implements UserDao {
/**
* 方式一,使用Spring自带的注解注入引用类型属性
*/
@Autowired
@Qualifier(value = "user")
private User user;
@Override
public void saveUser() {
System.out.println("保存成功...username=" + user.getUsername()+" age="+user.getAge());
}
}
测试
测试方法不变,运行结果如下:
另一种注入引用类型值的方式是使用java提供的@Resource注解,个人比较喜欢使用这个,因为相对使用第一种方式可以少写一个注解,哈哈懒得动.另外它不依赖于aop的jar包
package blog.csdn.net.mchenys.dao;
import javax.annotation.Resource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Repository;
import blog.csdn.net.mchenys.domain.User;
@Repository(value = "userDao")
public class UserDaoImpl implements UserDao {
/**
* 方式二,使用java自带的注解注入引用类型属性
* 注意:@Resource注解的属性名是name不是value
*/
@Resource(name = "user")
private User user;
@Override
public void saveUser() {
System.out.println("方式二,保存成功...username=" + user.getUsername()+" age="+user.getAge());
}
}
测试结果如下: