Spring是一个开源框架,也是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson
在其著做《Expert One-On-One J2EE Development and Design》中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而建立的。java
Spring使用基本的JavaBean
来完成之前只可能由EJB
完成的事情。然而,Spring的用途不只限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用均可以从Spring中受益。 简单来讲,Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。程序员
spring的基本框架主要包含六大模块:DAO
、ORM
、AOP
、JEE
、WEB
、CORE
。web
Spring DAO
:Spring提供了对JDBC的操做支持:JdbcTemplate模板工具类 。Spring ORM
:Spring能够与ORM框架整合。例如Spring整合Hibernate框架,其中Spring还提供HibernateDaoSupport工具类,简化了Hibernate的操做 。Spring WEB
:Spring提供了对Struts、Springmvc的支持,支持WEB开发。与此同时Spring自身也提供了基于MVC的解决方案 。Spring AOP
:Spring提供面向切面的编程,能够给某一层提供事务管理,例如在Service层添加事物控制 。Spring JEE
:J2EE开发规范的支持,例如EJB 。Spring Core
:提供IOC容器对象的建立和处理依赖对象关系 。spring
IOC容器:就是具备依赖注入功能的容器,是能够建立对象的容器,IOC容器负责实例化、定位、配置应用程序中的对象及创建这些对象间的依赖。一般new一个实例,控制权由程序员控制,而"控制反转"是指new实例工做不禁程序员来作而是交给Spring容器来作。。在Spring中BeanFactory是IOC容器的实际表明者。编程
DI(依赖注入Dependency injection) :在容器建立对象后,处理对象的依赖关系。服务器
依赖注入spring的注入方式:mvc
一、set注入方式:
控制层代码:框架
private OrderServiceImp orderService; public void setOrderService(OrderServiceImp orderService) { this.orderService = orderService; }
Spring配置XML
文件:其中配置声明OrderAction
类存在属性orderService。程式运行时候,会将已经实例化的orderService对象调用setOrderService方式注入。ide
<bean name="orderAction" class="com.pec.action.OrderAction"> <property name="orderService" ref="orderService"></property> </bean> <bean name="orderService" class="com.pec.service.imp.OrderServiceImp"></bean>
二、构造器注入方式:
控制层代码:工具
private OrderServiceImp orderService; public OrderAction(OrderServiceImp orderService) { this.orderService = orderService; }
Spring配置XML
文件:
<bean name="orderAction" class="com.pec.action.OrderAction"> <constructor-arg ref="orderService"></constructor-arg> </bean> <bean name="orderService" class="com.pec.service.imp.OrderServiceImp"></bean>
三、基于注解的方式(推荐使用,比较便捷少配置
)
控制层代码:
@Autowired //@Resource private OrderServiceImp orderService;
服务层代码:
@Service("orderService") public class OrderServiceImp implements IOrderService { @Autowired private JavaOrderMDaoImp javaOrderMDao; @Autowired private JavaOrderDDaoImp javaOrderDDao; @Override public List<JavaOrderMList> findOrderM(OrderSearch search) { return javaOrderMDao.findJavaOrderM(search); } @Override public List<JavaOrderDList> findOrderD(OrderSearch search) { return javaOrderDDao.findJavaOrderD(search); } }
DAO
层代码:
@Repository("javaOrderMDao") public class JavaOrderMDaoImp extends BaseHibernateDAO<JavaOrderM, Serializable> implements IJavaOrderMDao {...}
@Repository("javaOrderDDao") public class JavaOrderDDaoImp extendsBaseHibernateDAO<JavaOrderD, Serializable> implements IJavaOrderDDao {...}
注意点:
⑴ 持久层DAO层注解Repository中规定了名称,在Service层中声明名称必须一致。
⑵ 服务层Service层注解Service中规定了名称,在控制层中声明的名称必须一致。
⑶ 注解方式注入依赖注解:
@Component 把对象加入ioc容器,对象引用名称是类名,第一个字母小写 @Component(“name”) 把指定名称的对象,加入ioc容器 @Repository 主要用于标识加入容器的对象是一个持久层的组件(类) @Service 主要用于标识加入容器的对象是一个业务逻辑层的组件 @Controller 主要用于标识加入容器的对象是一个控制层的组件 @Resource 注入属性(DI), 会从容器中找对象注入到@Resource修饰的对象上 @Autowired 注入属性(DI), 会从容器中找对象注入到@Autowired修饰的对象上
⑷ 注解能够简化配置,提高开发效率,可是也不利于后期维护。