Spring 中Bean属性的注入分为两种:一种为普通属性,如private String name ;另一种为
一:普通属性的注入:
之前注入值需要提供一个Setter方法来,但是通过注解,可以不用使用Setter方法。
@Value(valeu="哈哈”)
private String name;
二:如果为对象属性
@Autowired
private User user;
@Repository
public class User{}
按照名称注入
但是我们使用较多的是按照名称来注入
@Repository("userDao")
public class UserDAO {
}
@Autowired
// Autowired 表示自动装配,默认使用类型注入
// 如果使用按名称注入则需要下边这个注解
// 而且要与调用类中的使用的名字一样 @Repository("userDao"),
@Qualifier("userDao")
// 如果不一样,则就不能注入成功
// @Autowired(required) required 默认为true,改为false,注入不成功将不会出现异常
// @Resource (name="userDao") 这个注解是对以上两个注解的整合,相当于以上两个注解的作用
private UserDAO userDAO;
完整代码为
UserService类:
package cn.itcast.Spring3.demo1;
import javax.annotation.Resource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Repository;
/**
* 通过注解的方式来装配Bean
*/
// 由于Component注解中只有一个属性value,所以可以省略
// userService 相当于给这个Bean 起了一个名字
@Component("userService")
// 基于注解的开发需要在配置文件中引入Context 空间,配置去扫描哪些包
public class UserService {
// 按值进行注入
@Value(value = "哈哈")
private String name;
@Autowired
// Autowired 表示自动装配,默认使用类型注入
// 如果使用按名称注入则需要下边这个注解
// 而且要与调用类中的使用的名字一样 @Repository("userDao"),
@Qualifier("userDao")
// 如果不一样,则就不能注入成功
// @Autowired(required) required 默认为true,改为false,注入不成功将不会出现异常
// @Resource (name="userDao") 这个注解是对以上两个注解的整合,相当于以上两个注解的作用
private UserDAO userDAO;
public void sayHello() {
System.out.println("Hello Spring Annotetion…… " + name);
}
@Override
public String toString() {
return "UserService [name=" + name + ", userDAO=" + userDAO + "]";
}
}
UserDAO类
package cn.itcast.Spring3.demo1;
import org.springframework.stereotype.Repository;
// 作用和 @Component 一样,但是@Repository含有分层的思想
// @Repository 表示使用按类型注入的方式。
// 如果使用按名称来注入则需要 @Repository()
@Repository("userDao")
public class UserDAO {
}
测试类:
package cn.itcast.Spring3.demo1;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Spring3Test1 {
@Test
public void demo1() {
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
UserService userService = (UserService) applicationContext.getBean("userService");
System.out.println(userService);
}
}
<?xml version="1.0" encoding="UTF-8"?>
<!-- -->
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<!-- 告诉配置文件扫描哪个包 -->
<context:component-scan base-package="cn.itcast.Spring3.demo1" />
</beans>