写在前面:通过前两篇文章,已经学习了如何通过配置文件搭建spring开发环境,本篇文章将演示如何通过注解方式搭建spring开发环境。
开发步骤:
1)下载源码,准备jar包(这里用的是spring3.2.5版本)
commons-logging-1.1.3.jar 日志
spring-beans-3.2.5.RELEASE.jar bean节点
spring-context-3.2.5.RELEASE.jar spring上下文节点
spring-core-3.2.5.RELEASE.jar spring核心功能
spring-expression-3.2.5.RELEASE.jar spring表达式相关
2)配spring核心配置文件applicationContext.xml也可自定义文件名bean.xml.
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
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">
3)使用注解
使用注解的步骤:
i)引入context名称空间
xmlns:context="http://www.springframework.org/schema/context"
ii)开启注解扫描
配置文件:
<context:component-scan base-package="e"></context:component-scan>
因为我的包名叫“e”,所以这里base-package="e",表示扫面e包及其子包。
iii)使用注解
将对象加入ioc容器,这里用的对象是aciton/service/dao模式
//@Component(value="userDao")//注解中,value属性可以省略
@Component
public class UserDao {
public void save() {
System.out.println("DB:保存成功");
}
}
//@Component(value="userService")
@Component
public class UserService {
@Resource(name="userDao") //根据名称查找,从容器中取出名为userDao的对象
private UserDao userDao;
public void saveUser() {
userDao.save();
}
}
//@Component(value="userAction")
@Component
public class UserAction {
@Resource(name="userService")
private UserService userService;
public void execute() {
userService.saveUser();
}
}
运行测试代码:
public class App {
//创建容器对象
private ApplicationContext ac = new ClassPathXmlApplicationContext("e/applicationContext.xml");
@Test
public void testAction(){
UserAction ua = (UserAction)ac.getBean("userAction");
ua.execute();
}
}
运行结果:
@Component(value="userDao")或者@Component("userDao")表示将UserDao加入容器,创建对象名为userDao。
@Component 默认将该类加入容器,名字为类名首字母小写,如:将UserDao加入容器,那么容器中UserDao的类名为userDao。
@Resource(name="userDao") 说明按名称查找,从容器中查找名为userDao的对象,赋值给添加注解的属性
@Resource 说明按照类型查找,从容器中查找类型为UserDao的对象,赋值给添加注解的属性,如果此时容器中UserDao类型的对象由多个,则报错。
由于每个类都使用@Component注解,看不出是哪一层的注解,故而可改用注解方式二:
//@Component(value="userDao")//注解中,value属性可以省略
//@Component 由于都是component开不出类的层级关系,因而改用Repository
@Repository //持久层注解
public class UserDao {
public void save() {
System.out.println("DB:保存成功");
}
}
//@Component(value="userService")
//@Component
@Service //业务逻辑层注解
public class UserService {
// @Resource(name="userDao") //根据名称查找
@Resource //根据类型查找,容器中如果同一类型对象由超过两个,则会报错
private UserDao userDao;
public void saveUser() {
userDao.save();
}
}
//@Component(value="userAction")
//@Component
@Controller //控制层注解
public class UserAction {
// @Resource(name="userService")
@Resource
private UserService userService;
public void execute() {
userService.saveUser();
}
}
测试代码同上,测试结果同上。
注解方式也可以和xml方式一起使用,如:
将UserDao类的注解去掉,增加set方法,在applicationContext.xml添加配置
<bean id="userDao" class="e.UserDao"></bean>
测试代码同上,测试结果同上。
以上,注解方式搭建spring开发环境就讲完了,如有错误,请指出。