1.DI 依赖注入
在Spring框架中,两个组件对象之间具有依赖关系(使用和被使用),依赖注入技术就是将被使用者对象给使用者对象传进去.
*1)setter方式注入(推荐)
a.在使用者中,定义"接口类型"的变量和setter方法
b.在spring容器配置中,添加<property name="属性" ref="要注入的对象名">
2)构造方式注入
a.在使用者中,定义"接口类型"的变量和带参数的构造方法
b.在spring容器配置中,添加<constructor-arg index="参数索引" ref="要注入的对象名"/>
*2.IOC
IOC Inversion Of Controll 反向控制,控制转移
在Spring中利用DI技术,实现了IOC机制,将两个组件解耦.
控制权:可以指定调用关系,可以创建对象,可以管理和释放对象.
一般编程,使用者具有控制权,可以指定调用哪个组件,负责创建对象这些工作;但是基于Spring框架之后,
使用者控制权转移到了Spring容器,由Spring容器负责这些工作.
采用了IOC之后,如果底层组件(DAO)发生替换,只要修改Spring容器的配置,不需要修改上层组件(Action),
将组件进行了解耦,增强了程序结构的灵活性.
3.各种类型值注入的格式
1)基本类型值的注入格式
<property name="size">
<value>15</value>
</property>
*2)Bean对象的注入格式
<property name="userDao" ref="userdao">
</property>
3)集合类型值的注入格式
List,Set,Map,Properties类型注入格式
4.组件自动扫描(了解)
此功能从spring2.5开始支持,因为2.5开始基于jdk5.0,从jdk5.0开始有了注解技术.
利用该技术,可以将指定package下的组件,自动扫描纳入到spring容器中.避免在xml中编写大量<bean>元素
使用方法如下:
1)在spring的xml配置中,引入context命名空间
2)利用<context:component-scan>元素
<context:component-scan base-package="包路径"/>
3)如果发现包中的类,类定义前面有以下注解,将纳入spring容器,id名默认采用类名(首字母小写).
@Controller :扫描控制层组件的注解标记,例如Action
@Service :扫描业务层组件的注解标记,例如Service
@Repository :扫描数据访问层组件的注解标记,例如DAO
@Component :其他组件
如果需要自定义id名,可以采用@Controller("id自定义名")
4)属性注入注解
在变量定义前,使用@Resource注解标记,spring默认会采用类型匹配原则将符合的bean对象注入进来.
如果按指定id名注入bean对象,可以使用
@Resource(name="bean对象的id名").
注入还可以使用@Autowired,如果需要注入指定名的bean对象.
@Autowired
@Qualifier("hibernateUserDAO")
注意:setter方法可以不写,将来spring自动生成.
5)其他注解
@Scope("prototype")//等价于<bean scope="prototype">
@PostConstruct//等价于<bean init-method>
@PreDestroy//等价于<bean destroy-method>
1.AOP的概念及优点
Aspect Oriented Programming面向方面编程.
面对象编程的关注点是对象,面向方面编程以面向对象编程为基础,关注点是切面,切面组件可以作用在若干目标对象的方法上,封装了具有通用性的一些处理.例如日志记录,事务处理,异常处理等等.
面向方面编程优点:将共通处理封装成了一个独立组件,利用配置形式作用在了某一批目标对象上,实现组件的重复利用,将切面和目标对象解耦,实现了低耦合应用.
*a.切面(Aspect)
封装了共通处理的组件,可用于切入到目标对象的处理方法中
*b.切入点(Pointcut)
用于指定目标对象和方法的一个表达式.是连接点的集合.
连接点是切面组件与某一个目标对象方法的作用点,例如方法调用和异常发生
*c.通知(Advice)
用于指定切面功能切入目标对象方法的位置.例如切入到目标方法调用之前,目标方法调用之后等.
通知类型:前置通知,后置通知,环绕通知,最终通知,异常通知
try{
//执行前置通知<aop:before>
//执行环绕通知--前置<aop:around>
执行目标对象方法
//执行环绕通知--后置
//执行后置通知<aop:after-returnning>
}catch(Exception ex){
//执行异常通知<aop:after-throwing>
}finally{
//执行最终通知<aop:after>
}
d.目标对象(Target)
需要使用切面功能的,被切入的Bean对象.使用切入点表达式指定
e.动态代理(AutoProxy)
在Spring采用了AOP之后,从容器取出的目标对象是一个动态代理类型,调用代理对象方法时,代理对象会调用切面功能和目标对象功能.
动态代理类生成技术:
有接口的目标对象采用JDK Proxy技术.
没有接口的目标对象采用CGLIB技术.
2.切入点表达式的定义
1)方法限定execution
execution(修饰符? 返回类型 方法名(参数类型) throws 异常?)
a.匹配com.tarena.UserDAO的save()方法
execution(* com.tarena.UserDAO.save(..))
b.匹配com.tarena.UserDAO的所有方法
execution(* com.tarena.UserDAO.*(..))
c.匹配com.tarena.UserDAO的所有public void方法
execution(public void com.tarena.UserDAO.*(..))
d.匹配com.tarena包下所有类型的所有方法
execution(* com.tarena.*.*(..))
e.匹配com.tarena包下及其子包所有类型的所有方法
execution(* com.tarena..*.*(..))
f.匹配UserDAO中有一个参数并且是String类型的方法
execution(* com.tarena.UserDAO.*(java.lang.String))
2)类型限定within
within(类型)
a.匹配com.tarena.UserDAO的所有方法
within(com.tarena.UserDAO)
b.匹配com.tarena包下的所有类的所有方法
within(com.tarena.*)
c.匹配com.tarena包下及其子包的所有类的所有方法
within(com.tarena..*)
3)id名限定bean
bean(idOrName属性值)
a.匹配容器中所有id或name属性值以dao结尾的bean对象
bean(*dao)
1.Spring与Struts2整合(方法二推荐使用)结构图参考ssh2-1.jpg
特点:将Service,DAO组件都交给Spring容器管理.Action交给StrutsSpringObjectFactory创建,并且利用spring容器中的Bean对象给Action属性注入.默认按名称匹配原则注入.
1)在web.xml中配置ContextLoaderListener(参考整合方法一)
2)引入了Struts2和Spring整合的开发包.
注意:在编写Action组件时,如果某个属性需要使用Spring容器Bean对象,该属性名要与Spring容器中<bean>元素的id值保持一致,因为默认是按名称匹配原则注入.如果名称不一致还要注入,可以修改default.properties中的参数设置,改为按类型匹配注入.在struts.xml中添加以下定义
<constant name="struts.objectFactory.spring.autoWire"
value="type"/>
2.Spring的事务管理
1)编程式事务管理方式(基于编码实现,了解)
public Object someServiceMethod() {
return transactionTemplate.execute(
new TransactionCallback() {
// the code in this method executes in a transactional context
public Object doInTransaction(TransactionStatus status) {
updateOperation1();
return resultOfUpdateOperation2();
}
});
}
2)声明式事务管理方式(基于配置实现,推荐使用)
a.首先定义一个事务管理bean
jdbc访问数据库的事务管理bean,(需要注入dataSource):
org.springframework.jdbc.datasource.DataSourceTransactionManager
hibernate访问数据库的事务管理bean(需要注入sessionFactory):
org.springframework.orm.hibernate3.HibernateTransactionManager
b.引入tx命名空间,定义事务管理通知
<tx:advice id="txAdvice" transaction-manager="txManager">
<tx:attributes>
<tx:method name="save*" propagation="REQUIRED"/>
......
<tx:attributes>
</tx:advice>
c.添加aop配置,将事务通知切入到目标对象
<aop:config>
<aop:pointcut id="daocut"
expression="within(com.tarena.dao.impl.*)"/>
<!-- advisor是通知和切入点的结合体 -->
<aop:advisor advice-ref="txAdvice"
pointcut-ref="daocut"/>
</aop:config>
Spring中常用事务类型:
REQUIRED--支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。
SUPPORTS--支持当前事务,如果当前没有事务,就以非事务方式执行。
MANDATORY--支持当前事务,如果当前没有事务,就抛出异常。
REQUIRES_NEW--新建事务,如果当前存在事务,把当前事务挂起。
NOT_SUPPORTED--以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
NEVER--以非事务方式执行,如果当前存在事务,则抛出异常。
NESTED--如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则进行与REQUIRED类似的操作。
拥有多个可以回滚的保存点,内部回滚不会对外部事务产生影响。只对DataSourcManager有效
3.利用注解方式整合ssh2
1)注解方式管理事务
a.在Spring容器配置中,添加以下配置,启用事务注解
<!-- 启用注解方式管理事务 -->
<tx:annotation-driven
transaction-manager="txManager"/>
b.在目标对象类定义或方法定义前,使用@Transactional
2)组件自动扫描功能
<context:component-scan base-package="com.tarena"/>
@Repository,@Service,@Component,@Controller
@Resource,@AutoWired
3)AOP注解
<aop:aspectj-autoproxy/>
@Aspect,@PointCut,@Around,@AfterThrowing等
4)Spring配置文件可以拆成若干个.例如示例拆成
applicationContext-base.xml
applicationContext-annotation.xml
在web.xml中,定义spring容器实例化部分修改文件引用
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext-*.xml</param-value>
</context-param>
*1.SSH2整合关键步骤(重点)
1)客户发请求,请求首先进入Struts2框架
--检查web.xml是否配置Struts2控制器
2)控制器要根据struts.xml进行请求的处理
--检查struts.xml配置文件<action>元素
3)控制器要调用Action对象的execute处理请求
--检查struts-spring-plugin.jar整合插件包是否引入
4)整合插件负责创建Action对象,访问Spring容器,将容器中的Service对象给Action对象注入.
--检查Action对象属性与Spring容器中Service的<bean>定义的id是否一致
5)Spring容器负责创建Service对象,将DAO对象给Service注入.
--检查applicationContext.xml容器配置
--检查Service组件的<bean>定义,以及注入DAO配置
--检查DAO组件的<bean>定义,以及sessionFactory配置
--检查sessionFactory组件<bean>定义,以及dataSource配置
6)Spring容器需要在Tomcat启动时创建
--检查web.xml,ContextLoaderLisener的定义.
2.Spring的MVC框架(了解)
1)客户发送*.do请求
2)请求到达web.xml声明的DispatcherServlet控制器
3)控制器调用Spring容器中的HandlerMapping组件处理
4)HandlerMapping负责请求和Controller处理组件的映射
5)控制器调用请求对应的Controller组件,执行约定处理方法.
6)Controller处理完毕,返回ModelAndView组件对象
7)ModelAndView负责封装模型数据(request)和响应视图名
8)控制器调用视图解析器ViewResolver,寻找对应的JSP视图
9)在JSP响应视图中可以利用标签和EL获取模型数据显示.
3.Spring框架的体系结构(了解)
Spring主要由6个模块构成.
a.Core模块:IoC容器,提供IoC控制服务.
b.AOP模块:提供AOP控制服务.
c.DAO模块:提供整合JDBC技术的服务,提供JDBC事务管理
d.ORM模块:提供整合ORM技术的服务,提供事务管理
e.Web模块:提供SpringMVC,整合其他Web框架的服务.
f.JavaEE模块:提供整合JavaEE服务.例如JMS消息服务等
分享到:
相关推荐
spring介绍ppt 介绍spring的基本概念和使用,从ioc和aop讲起,对想快速了解spring的人有很大帮助
spring介绍,spring 原理,spring 入门,spring入门总结
体验控制反转的理念及Spring介绍技术文档,相信对大家有所帮助;
Spring介绍 一 Spring的主要技术 1 IOC: 2 AOP动态代理: 3 Spring中支持事务管理
Spring介绍 1. Spring 2. 使用spring的主要目的 3. Spring的模块 Ejb容器(以前是) Ioc容器(现在的控制权) 控制反转Ioc(Invertion of control)依赖注入(Dependency Injection) 4. Ioc容器作用 5. Spring中注入方式 ...
Spring框架是一个开放源代码的J2EE应用程序框架,由Rod Johnson发起,是...Spring框架主要由七部分组成,分别是 Spring Core、 Spring AOP、 Spring ORM、 Spring DAO、Spring Context、 Spring Web和 Spring Web MVC。
java教材37-Spring介绍(IT job就业培训)
以ppt的形式介绍了SSH框架中的spring的核心技术和相应的使用方法,并提到了spring的实现机制
Spring介绍 ppt 可供初学者查阅,介绍了spring的aop和ioc
详细讲解框架spring的原理、使用、环境,用通俗易通的语言
Spring框架介绍: Spring是一个开源的Java框架,用于构建企业级应用程序。它提供了广泛的基础设施支持和丰富的特性,使得开发者能够轻松构建可维护、可扩展、松耦合的应用。以下是Spring框架的一些关键特性和组件:...
这个ppt是我在给我们研究所同学们做讲解时用的,主要以图解的方式分析了IoC和AOP的概念,通俗易懂,在阅读时还可以对照我发的《Spring学习笔记++》看,效果会更好。如果在阅读中有不清楚的地方可以联系我:shansun...
Spring和 IOC 介绍 及简要配置说明,
JAVA spring的优缺点详解
Spring 简介 Spring 简介
Spring是一个开源的Java平台,它提供了全面的编程和配置模型,用于现代Java应用程序。Spring最初由Rod Johnson在2003年创建,目的是解决企业应用开发的复杂性。Spring的核心特性包括依赖注入(DI)和面向切面编程...
1. Spring 介绍 1.1 Spring 的优点 1.2 Spring 的缺点 1.3 详细讲解一下核心容器(spring context应用上下文) 模块 2. Spring俩大核心概念 IOC,Inversion of Control,控制反转 AOP(Aspect-OrientedProgramming),...