在applicationContext.xml中开启注解扫描
//引入context标签
xmlns:context="http://www.springframework.org/schema/context"
//xsi:schemaLocation加入一下两行
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标签格式为:
<!--开启注解扫描-->
<context:component-scan base-package="com.test"></context:component-scan>
将需要纳入spring中的Bean的类名上面添加注解@Component(value=”userDao”)
//将UserService纳入Spring管理
//这个步骤相当于
//<bean id="userService" class="com.test.service"></bean>
@Component(value="userService")
//指定单例还是多例,默认就是单例不许要指定
@Scope(value="prototype")
public class UserService
{
//这里是注入,省略setter和getter方法
//为UserService的属性userDao注入名字为userDao的Component
@Resource(name="userDao")
private UserDao userDao;
}
//------------
//将userDao纳入Spring管理
@Component(value="userDao")
public class UserDao
{
}
component的几个替代
- @Repositor:用于对数据层实现类进行标注
- @Controller:用于对控制层实现类进行标注
@Service:用于对业务逻辑层实现类进行标注
以上三种注解与@Component功能完全相同,仅仅是名称上的区别,为了增强语义Resource的一个升级?
@Autowired(required=true)
@Qualifier(value=”userDao”)
Qualifier要与Autowired同时用,不能单独存在,作用是为复合属性(对象类型)注入,如userDao
这两个注解等同于@Resource(name=”userDao”)
区别在于required=true,
意义在于:当把属性所在类纳入Spring管理时,这个属性必须被注入值,如果注入失败,则报出异常
(也就是说一定要注入成功)
例如userService中,如果userDao没有注入成功,那么userService也就失去了纳入Spring管理的意义了.
@Autowired
@Value(value=”108”)
private Integer age;
Value与Autowired同时用,为基本属性(基本类型)注入值
Junit整合Spring
导入spring-test-3.2.0.RELEASE.jar包add to build path
//设置类运行器
@RunWith(SpringJUnit4ClassRunner.class)
//设置读取Spring的配置文件路径
//就相当于智动获取到ApplicationConte appContext=new ClassPathXmlApplicationContext("applicationContext.xml");
@ContextConfiguration(locations="classpath:/applicationContext.xml")
public class testService
{
//由于上面加上了ContextConfiguration,这里就自动注入了
@Resource(name="userAction")
private UserAction userAction;
@Test//导入Junit的jar包
public void add()
{
}
}