Spring基于XML和annotation的配置
2016-12-27 16:14
597 查看
Spring IOC的三种注入方式:
1、set、get方法注入(推荐)
2、接口注入(不推荐)
3、构造器注入(死的应用)
一、基于xml的配置
本例存在dao层、service层、action层(模仿struts2的action),同时使用set、get方法注入
以上完成基本代码的编写,接下来进行sprig xml的配置
以上完成Spring基于XML的配置
二、基于annotation的配置(注解)
同hibernate一样,Spring提供基于annotation的配置,另外在写Spring配置文件的时候要注意,一定要加上context的schema
1、set、get方法注入(推荐)
2、接口注入(不推荐)
3、构造器注入(死的应用)
一、基于xml的配置
本例存在dao层、service层、action层(模仿struts2的action),同时使用set、get方法注入
//实体类user public class User { private int id; private String name; private int age; private String sex; //构造方法,set、get方法。。。。
//IUserDao接口 public interface IUserDao { public void add(User user); public void update(User user); public void delete(int id); public void delete(User user); public User load(int id); public List<User> list(); }
//实现IUserDao接口 public class UserDao implements IUserDao { @Override public void add(User user) { System.out.println("增加了用户:"+user); } 。。。。。。。
//userService public class UserService { /** * 注入的属性一定要提供get和set方法,spring就是 * 通过set方法注入的,在这注入userDao */ private IUserDao userDao; public IUserDao getUserDao() { return userDao; } public void setUserDao(IUserDao userDao) { this.userDao = userDao; } public void add(User user) { userDao.add(user); } 。。。。。。
//创建UserAction public class UserAction { /** * 必须提供get和set方法,注入userService */ private UserService userService; public UserService getUserService() { return userService; } public void setUserService(UserService userService) { this.userService = userService; } public void add(User user) { userService.add(user); } 。。。。。。
以上完成基本代码的编写,接下来进行sprig xml的配置
<?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-3.1.xsd"> <!-- 注入userDao对象 id:对象名称 class:包的完整路径--> <bean id="userDao" class="com.lzcc.dao.UserDao"/> <!-- 注入userService对象 --> <bean id="userService" class="com.lzcc.service.UserService"> <!-- 在UserService中引用UserDao对象,所以通过property来注入 注意:name表示UserService中的属性名称,ref表示该属性 要注入的对象值 --> <property name="userDao" ref="userDao"/> </bean> <!-- 注入UserAction对象 --> <bean id="userAction" class="com.lzcc.action.UserAction"> <!-- 在UserAction中引入UserService对象 --> <property name="userService" ref="userService"/> </bean> </beans>
以上完成Spring基于XML的配置
二、基于annotation的配置(注解)
同hibernate一样,Spring提供基于annotation的配置,另外在写Spring配置文件的时候要注意,一定要加上context的schema
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd[/code]
同时在spring配置文件中加入以下代码<!-- 这个就是告诉spring,我要使用annotation --> <context:annotation-config /> <!-- 在com.lzcc.spring路径下扫描annotation --> <context:component-scan base-package="com.lzcc" />
之后注册各层的组件,在spring3.0之前的版本,所有的组件统一使用component(组件)这个annotation
dao层//<bean id="userDao" class="com.lzcc.spring.dao.UserDao"/> @Component("userDao") public class UserDao implements IUserDao { }
service层@Component(value="userService") public class UserService { }
action层@Component(value="userAction") public class UserAction{ }
这样完成各层组件的注入,而调用底层的属性通过@Resource注入
在UserService注入UserDao/** * 注入的属性一定要提供get和set方法,spring就是 通过set方法注入的 */ private IUserDao userDao; public IUserDao getUserDao() { return userDao; } //在属性的set方法上面加 @Resource(name="userDao")//通过名称注入 public void setUserDao(IUserDao userDao) { this.userDao = userDao; }
在UserAction中注入UserService/** * 必须提供get和set方法 */ private UserService userService; public UserService getUserService() { return userService; } @Resource//如果组建和属性set上面的名称一致,可以不加name的 public void setUserService(UserService userService) { this.userService = userService; }
这样完成了spring 3.0之前版本的annotation的配置
当然在spring 3.0之后,spring 为了分辨不同的层,就不再使用@Component这个annotation了,它将MVC各层都使用了各自的annotation来配置,如dao层使用
@Repository(工厂),表示Dao层是数据工厂,@Service表示service层,@Controller表示MVC的控制层,也就是action层
如dao层@Repository//工厂annotation,表示dao层 public class UserDao implements IUserDao {
service层@Service//service层 public class UserService { /** * 注入的属性一定要提供set、get方法,spring就是通过set方法注入的 */ private IUserDao userDao; public IUserDao getUserDao() { return userDao; } @Resource(name="userDao") public void setUserDao(IUserDao userDao) { this.userDao = userDao; }
Controller层@Controller//基于annotation的配置,控制层 @Scope("prototype")//多例模式 public class UserAction { /** * 必须提供set、get方法 */ private UserService userService; public UserService getUserService() { return userService; } @Resource(name="userService") public void setUserService(UserService userService) { this.userService = userService; }
以上Spring基于annotation的配置完成
注意:Scope有单例模式(singleton)和多例模式(prototype),当在类中的属性存在变化的时候必须要使用多例模式,否则值会串,所以在action中要配置Scope为多例模式
相关文章推荐
- Spring中基于配置XML与Annotation注解配置AOP
- Spring3与Hibernate4整合,Spring中配置Hibernate基于XML和annotation的sessionFactory方式。
- Spring Aop实现——Annotation方式(注解式)and Schema-based式(xml配置)
- spring3 混合使用 XML 与注解(Annotation)进行 Bean 的配置
- 基于spring3.0的采用XML配置的spring MVC项目
- 基于XML的spring AOP配置
- spring aop xml方式的配置案例 以及 annotation方式的配置aop
- Spring Aop实现——Annotation方式(注解式)and Schema-based式(xml配置)
- spring采用基于xml配置方式进行事务的处理
- Spring 在 xml配置文件 或 annotation 注解中 运用Spring EL
- Spring 注解(Annotation)代替XML实现零配置
- Spring3.2 中 Bean 定义之基于 Annotation 和 Java Code 配置方式的源码解析
- spring-基于注释(Annotation)的配置
- spring-基于注释(Annotation)的配置
- Spring 声明式事务管理 Annotation配置 xml文件
- web.xml之Spring配置(基于SSI)
- 【学习】Spring 的 AOP :基于Annotation 的“零配置”方式
- 基于Annotation 的多对一ManyToOne双向和基于XML配置多对一双向
- 一步一步深入spring(6)--使用基于XML配置的spring实现的AOP
- spring学习笔记12----Spring+jdbc组合开发( 采用基于xml方式配置事务)