`
clq9761
  • 浏览: 588223 次
  • 性别: Icon_minigender_1
  • 来自: 福建
社区版块
存档分类
最新评论

Spring应用总结

阅读更多

1.Spring的IOC容器的关键点

 

(1)必须将被管理的对象定义到Spring配置文件中。
(2)必须定义构造函数或setter方法,让Spring将对象注入进来。
(3)Spring默认的scope配置为singleton(单例模式),默认在容器启动时
       就对bean进行实例化,可配置lazy-init=”true”,则获取Bean时才会初始化。
       如果改为prototype,则每次会创建一个新实例,可避免线程安全问题。
(4)Spring的自动装配有二种:
  一种是根据名称自动装配,例setXXX(),XXX需与Spring中配置的ID一致,
           在头部文件中定义default-autowire=”byName”,
  另一种是根据类型自动装配,Spring中配置的Id可随意定义,可不与setXXX()中的XXX一致,
            会自动查找相应的Class类型,在头部文件中定义default-autowire=”byType”


2.Spring相关概念


(1)IOC(控制反转):应用本身不负责依赖对象的创建及维护,依赖对象的创建及维护是由外部容器实现的。
(2)DI(依赖注入):在运行期,由外部容器动态地将依赖对象注入到组件中。
(3)AOP(面向切面编程):通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一添加功能

 

3.Spring配置,如果XML文件不会自动提示,可配置相关的XSD文件。
(1)构造函数配置

例:<bean id="" class="">
	<constructor-arg ref=""></constructor-arg>
</bean>

 (2)set方法的配置

例:<bean id="jdbcTemplate" class=" ">
<property name="dataSource"  ref="dataSource"/>
</bean>

 

(3)init-method=”方法名”,可指定bean实例化时初始化调用的方法。
       Destroy-method=”方法名”,在spring容器关闭时,bean销毁时调用的方法。
(4)Spring集合类型的装配
       Set类型:

<property>
	<set>				
		<value>1</value>
		<value>2</value>
	</set>			
</property>

    List类型:

<list>			
	<value>1</value>
	<value>2</value>
</list>

    Properties类型:

<props>		
	<prop key="key1">value1</prop>
	<prop key="key2">value2</prop>
</props>

   Map类型:

<map>
	<entry key="key1" value="value1"></entry>
	<entry key="key2" value="value2"></entry>
</map>

 

 4.Spring的加载

BeanFactory factory = new ClassPathXmlApplicationContext
					("applicationContext.xml");
DataSource ds = (DataSource) factory.getBean("dataSource");

得到在Web.xml文件中配置的Spring实例

WebApplicationContext ctx = WebApplicationContextUtils
		.getWebApplicationContext(sx);
UserManager userManager = (UserManager)ctx.getBean("userManager");

 

5.Sping AOP


(1)静态代理,创建一个代理类,实现具体操作的接口,在每个实现方法前调用代理类的代理方法。

例:public class UserManagerProxy implements UserManager{
	private UserManager userManager;
	public UserManagerProxy(UserManager userManager){
		this.userManager = userManager;
	}
	public void addUser(User user){
		//可在此添加具体的代理方法,如checkSecurity()等
		this.userManager.addUser(user);
	}
}

 (2)动态代理

例:	public class SecurityHandler implements InvocationHandler{		
		private Object targetObject;		
		public Object newProxy(Object targetObject){
			this.targetObject = targetObject;
			return Proxy.newProxyInstance(targetObject.getClass().getClassLoader(),
					targetObject.getClass().getInterfaces(),this);
		}
		public Object invoke(Object proxy, Method method, Object[] args)
				throws Throwable {
			// 可在此添加具体代理操作方法
			Object ret = method.invoke(this.targetObject, args);
			return ret;
		}		
	}
//客户端调用代码:
例:		
SecurityHandler handler = new SecurityHandler();
UserManager userManager = (UserManager)handler
			.newProxy(new UserManagerImpl);
usermanager.deleteUser(userId);

 

(3)Cglib代理,用来代理没有实现接口的类
例:

public class MyClass {
	public void myMethod(){
		System.out.println("MyClass.myMethod()");
	}	
}
public class CglibTest {	
	public static void main(String args[]){
		Enhancer enhancer = new Enhancer();
		enhancer.setSuperclass(MyClass.class);
	    enhancer.setCallback( new MethodInterceptorImpl() );
	    MyClass my = (MyClass)enhancer.create();
	    my.myMethod();
	}
}
class MethodInterceptorImpl implements MethodInterceptor {
    public Object intercept(Object obj,
				    		Method method, 
				    		Object[] args, 
				    		MethodProxy proxy) 
				    		throws Throwable {
        System.out.println(method);
        // 可在此添加相关代理操作方法
        return proxy.invokeSuper(obj, args);
    }
}

 

6.Spring Aop应用 

 

Aop可执行前置通知,后置通知,例外通知,最终通知。

 

(1)相关概念
     Aspect(切面):横切性关注点的抽象即为切面。
     JointPoint(连接点):指那些被拦截到的点(spring中指方法)
     PointCut(切入点):指要对那些JointPoint进行拦截的定义。
     Advice(通知):指环绕到JointPoint之后所要做的事情(前置,后置…)
     Target(目标对象):指代理的目标对象
     Weave(织入):指将aspects应用到target对象并导致proxy对象创建的过程称为织入。
     Introduction(引入):在不修改类代码的前提下,在运行期动态为类添加方法或字段。
(2)基于注解方式的应用
     在xml中配置 <aop:aspectj-autoproxy />.
   2.1在类上添加@Aspect,代表切面
   2.2在方法上添加@PointCut(“execution(* com.test.service..*(..))”)
      PointCut代表切入点,指对哪些业务方法进行拦截定义。
      Execution指执行方法时调用。
      第一个*代表任意返回类型。
      Com.test.service..*指com.test.service包底下(包含子包)的所有类。
      (..)指代表任意参数值。
   2.3 @Before(“myMethod()”),前置通知,myMethod指切入点定义的方法。
   2.4 @AfterReturning(“myMethod()”),后置通知
   2.5 @After(“myMethod()”),最终通知
   2.6 @AfterThrowing(“myMethod()”),例外通知
   2.7 @Around(“myMethod()”),环绕通知
       如果通知中需接收参数,可用
       @Before(“myMethod() && args(name)”)
       对应public void myMethod(String name){}
       如果需接收返回值,可用
       @AfterReturning(pointCut=”myMethod()” ,returning=”result”)
       对应public void myMethod(String result){},将返回结果以参数值传入。
(3) 基于XML方式配置AOP
例:

<aop:aspectj-autoproxy />
<aop:config>
<aop:aspect id="aspectId" ref="aspectBean">
	<aop:pointcut id="myCut" expression="execution(* com.test.service..*(..))"/>		
	<aop:before  pointcut-ref="myCut" method="doAccessCheck"/>
</aop:aspect>		
</aop:config>>

 

7.Spring 事务应用


(1)使用注解方式配置事务
      1.1首先声明事务的命名空间 xmlns:tx="http://www.springframework.org/schema/tx"  
      1.2 配置事务管理器

	<bean id="transactionManager"	
		class="org.springframework.orm.hibernate3.HibernateTransactionManager">
	  <property name="sessionFactory" ref="sessionFactory" />
	</bean>	

      1.3 定义配置项,处理注解

	<tx:annotation-driven transaction-manager="transactionManager"
	proxy-target-class="true" />

 

      1.4 为类添加注解,声明事务
      @Transactional(在类上面定义,每个业务方法会启动一个事务)
(2)在Spring开启的事务中,默认情况下,如果碰到运行期异常(RuntimeException),则会回滚事务,
     如果是检查异常(Exception),则默认不回滚事务。
     可修改默认配置,在方法上添加注解
     例:@Transactional(rollbackFor = Exception.class),则检查异常也会回滚事务,
      如果为noRollbackFor,则不回滚事务。
(3)事务的相关传播特性
      3.1 @Transactional(propagation=Propagation.NOT_SUPPORTED),则不开启事务。
      3.2 REQUIRED,业务方法在一个事务中运行。(默认)
      3.3 REQUIRES_NEW 业务方法总会发起一个新事务。
      3.4 NESTED 使用一个单独的事务,拥有多个可以回滚的保存点。
 (4)事务的隔离级别,依赖于底层的数据库
           @Transactional(isolation=””)
      4.1 Isolation.READ_COMMITTED,读已提交的数据。
      4.2 READ_UNCOMMITTED,读未提交的数据。
      4.3 REPEATABLE_READ,可重复读
      4.4 SERIALIZABLE,串行化
  (5)基于XML配置事务

<aop:config>
<aop:pointcut id="transactionPointCut" 
  expression="execution(* com.service..*.*(..))" />
<aop:advisor advice-ref="txAdvice" pointcut-ref="transactionPointCut"/>		
</aop:config>
<tx:advice id="txAdvice" transaction-manager="txManager">
<tx:attributes>
<tx:method name="get *" read-only="true" propagation="NOT_SUPPORTED"/>
<tx:method name="*"/>
</tx:attributes>
</tx:advice>

 

8.Spring注解


采用Spring注解需导入相应的命名空间,并配置:
<context:annotation-config />
(1)@Autowired,默认按类型装配
     例: 
     @Autowired
     private BiJdbcTemplate biJdbcTemplate; 
     将BiJdbcTemplate类型的对象注入到它所属的类实例中。
 
(2)@Resource,默认按名称装配,当找不到名称装配再按类型匹配。
     例:@Resource
     Private Person person;
     将person对象注入到它所属的类实例中。
     如果指定(name=”person”),则只能按名称进行匹配。
(3)自动扫描组件纳入Spring进行管理

<context:component-scan base-package="com.rosy" />

 

    可在类路径下寻找标注了@Componet(组件,组件不好归类时使用),@Service(业务层),
    @Controller(控制层),@Repository(Dao层)的组件纳入Spring进行管理,以上注解可以替换使用,
    起标注作用而已。默认的类的名称为类的名称首字母变为小写,也可自己手动指定名称,
    例:@Service(“personService”);
 (4)@PostConstruct,在方法上使用,可用来类实例化时初始化方法,对应init-method配置。
(5)@PreDestroy,在方法上使用,可用来类实例销毁时调用,对应destory-method配置。

 

9.使用Spring解决web乱码问题


在web.xml文件中配置,例:

<filter>
	<filter-name>encodingFilter</filter-name>
	<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
	<init-param>
		<param-name>encoding</param-name>
		<param-value>UTF-8</param-value>
	</init-param>
	<init-param>
		<param-name>forceEncoding</param-name>
		<param-value>true</param-value>
	</init-param>
</filter>
<filter-mapping>
	<filter-name>encodingFilter</filter-name>
	<url-pattern>/*</url-pattern>
	<dispatcher>REQUEST</dispatcher>
	<dispatcher>FORWARD</dispatcher>
</filter-mapping>

 

分享到:
评论

相关推荐

    spring应用开发总结

    spring适用于扩展的详细笔记,针对《spring 3.x 企业应用开发实战》写的 详细总结,涵盖自己的心得体会

    面试知识点总结--Spring 应用框架技术.pdf

    面试知识点总结--Spring 应用框架技术.pdf

    Spring核心技术学习总结

    Spring核心技术学习总结 Spring核心技术学习总结

    Spring3.X编程技术与应用,完整扫描版

    送电子邮件、Spring JMS消息应用编程、教学资源全文检索设计、Java应用的报表打印、网络考试系统设 计、Spring应用的云部署与编程、SpringIntegration应用简介、基于MVC的文档网络存储服务 设计。 本书是作者近年来...

    SpringCloud视频教程全套百度网盘

    第1章 SpringCloud简介 第2章 SpringCache缓存详细讲解及应用 第3章 Redis高级缓存讲解及...第20章 SpringCloud总结 学习SpringCloud前面要对SpringBoot有一定的了解及应用,在没SpringBoot 基础的建议先学习一下。

    spring配置文件:整理总结Spring中XML配

    Spring是个强大JAVA应用框架广泛地应用于JAVA应用为PlainOldJavaObjects(POJOs)提供企业级 服务Spring利用依赖注入机制来简化工作同时提高易测性Springbeans及依赖以及beans类所需服务都在配置 文件中进行了详细介绍...

    全网最热spring问题总结.pdf

    总结了常见的spring面试题,方便学习者查漏补缺。 使用 Spring 框架的好处是什么? 轻量: Spring 是轻量的, 基本的版本大约 2MB。 控制反转: Spring 通过控制反转实现了松散耦合, 对象们给出它们的依 赖, ...

    spring mvc深入总结

    spring mvc 深入总结,文章是转载拷贝而来,谢谢原作者!

    spring知识总结.xlsx

    该资源包含spring的详细应用,以及MVC的模式详解,配套如何使用mybatis,这三者之间的紧密配合,对Java初学者以及中期人员很有帮助,理解会更加透彻一点。

    Spring.3.x企业应用开发实战(完整版).part2

     《Spring3.x企业应用开发实战》是在《精通Spring2.x——企业应用开发详解》的基础上,经过历时一年的重大调整改版而成的,本书延续了上一版本追求深度,注重原理,不停留在技术表面的写作风格,力求使读者在熟练...

    spring batch批处理 教程

    五,Spring Batch应用 7 1,简单应用 7  构建应用 7  对象定义 7  读写及处理接口 8  任务定义 10  任务执行 11  任务重试 13  运行时管理 14 2,高级应用 16  Step Flow介绍 16  批量操作数据库...

    JFreeChart使用总结

    JFreeChart是开放源代码站点SourceForge.net上的一个JAVA项目,它主要用来各种各样的图表,这些图表包括:饼图、柱状图(普通柱状图以及堆栈柱状图)、线图、区域图、分布图、混合图、甘特图以及一些仪表盘等等。...

    spring应用

    总结的内容,针对初学者对spring应用的主要理解的方面

    Spring和SpringMVC面试问题总结(15个)

    Spring和SpringMVC面试问题总结 1.Spring中AOP的应用场景、Aop原理、好处? 2.Spring中IOC的作用与原理?对象创建的过程。 3.介绍spring框架 4.Spring常见创建对象的注解? 5.Spring中用到的设计模式 6.Spring的优点...

    spring培训-笔记

    目录: Spring教程 1 名词解释 2 Spring框架概述 3 Spring是什么?...Spring的历史 4 ...Spring对其它企业应用支持 22 注:后面的内容我将不再完善,但网上的朋友可以帮助完善,只需注明住处即可。

    spring杂谈 作者zhang KaiTao

    1.25 在应用层通过spring特性解决数据库读写分离 1.26 context:component-scan扫描使用上的容易忽略的use-default-filters 1.27 idea内嵌jetty运行springmvc项目报ConversionFailedException 1.28 springmvc 3.2 @...

    Spring开发指南

    几种依赖注入模式的对比总结 Spring Bean封装机制 Bean Wrapper Bean Factory ApplicationContext Web Context Spring 高级特性 Web 应用与 MVC Spring MVC Spring MVC指南 基于模板的Web表示层技术 Web...

    Spring教程  主要内容:介绍Spring的历史,Spring的概论和它的体系结构,重点阐述它在J2EE中扮演的角色。

    作者:钱安川(Moxie) 注:后面的内容我将不再完善,但网上的朋友可以帮助完善,只需注明住处即可。 Spring教程 1 Spring框架概述 3 Spring是什么? 3 Spring的历史 4 ...Spring对其它企业应用支持 22

    搞定J2EE核心技术与企业应用:Ajax,JSP,Struts2,Spring,Hibernate,完整扫描版

    《搞定j2ee核心技术与企业应用:ajax,jsp,struts 2,spring,hibernate》是笔者在多年项目开发过程中的经验总结,它通过丰富的实例由浅入深、循序渐进地介绍了目前采用java进行web开发的各种框架的使用方法,从而...

    Spring 2.0 + Struts 1.2 + Hibernate 3.2 + DWR 2.0 的JavaEE应用示例

    总结,该例示注释非常详细,演示Spring托管Hibernate和Struts的Action, 以及Spring的事务声明(包括1.x与2.x的用法)与非事务声明的使用方式。 使用DWR可以方便的使用Spring托管的持久层功能。 目的:希望广大Java...

Global site tag (gtag.js) - Google Analytics