Spring
文章平均质量分 71
confirmAname
编程爱好者
展开
-
Spring整合Hibernate
bean.xml :<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/conte原创 2013-08-10 04:41:10 · 587 阅读 · 0 评论 -
8.2.4: 使用@PostConstruct和@PreDestroy定制生命周期行为
@PostConstruct和@PreDestroy同样位于java.annotation包下,也是来自JavaEE规范的两个Annotation,Spring直接借鉴了它们,用于定制Spring容器中Bean的生命周期行为。@PostConstruct和@PreDestroy大致相当于元素的 init-method 属性和 destroy-method 属性指定的方法:@Componen原创 2013-07-28 05:52:49 · 1527 阅读 · 0 评论 -
7.8.6: 强制初始化Bean
Spring默认有个规则:总是先初始化主调Bean,然后再初始化依赖Bean。大多数情况下,Bean之间的依赖关系非常直接,Spring容器在返回Bean实例之前,完成Bean依赖关系的注入。假如Bean A依赖于Bean B,程序请求Bean A时,Spring容器会自动先初始化Bean B,再将Bean B注入Bean A,最后将具备完整依赖的Bean A返回给程序。在极端的情况下,B原创 2013-07-28 01:00:37 · 1514 阅读 · 0 评论 -
基于Annotation的Spring AOP: @After
@After与@AfterReturning有点相似,但是也有区别:① AfterReturning 增强处理只在目标方法成功完成后才会被织入。② After 增强处理不管目标方法如何结束,包括成功完成和遇到异常终止两种情况,它都会被织入。因为不论一个方法是如何结束的,After增强处理都会被织入,因此After增强处理必须准备处理正常返回和异常返回两种情况,这种增强处理通常用原创 2013-08-03 20:27:01 · 1618 阅读 · 0 评论 -
Spring AOP:访问目标方法的参数
访问目标方法 最简单的做法就是定义增强处理方法时将第一个参数定义为JoinPoint 类型,当该增强处理方法被调用时,该JoinPoint参数就代表了织入增强处理的连接点。JoinPoint里包含了如下几个常用的方法:Object[ ] getArgs( )返回执行目标方法时的参数Signature getSignature( )返回被增强的方法的相关信原创 2013-08-04 01:19:15 · 3606 阅读 · 0 评论 -
8.2.5: Spring3.0新增的@DependsOn和@Lazy
@DependsOn用于强制初始化其他Bean。可以修饰Bean类或方法,使用该Annotation时可以指定一个字符串数组作为参数,每个数组元素对应于一个强制初始化的Bean。@DependsOn({"steelAxe","abc"})@Componentpublic class Chinese implements Person{ //codes here}@Lazy用于指原创 2013-07-28 06:05:36 · 8161 阅读 · 0 评论 -
8.2.3: 使用@Resource配置依赖
@Resource位于java.annotation包下,是来自JavaEE规范的一个Annotation,Spring直接借鉴了该Annotation,通过使用该Annotation为目标Bean指定协作者Bean。@Resource有一个name属性,默认情况下,Spring将这个值解释为需要被注入的Bean实例的名字。换句话说,使用@Resource与元素的ref属性有相同的效果。@原创 2013-07-28 05:42:14 · 1975 阅读 · 0 评论 -
8.2.2:指定Bean的作用域
当使用XML配置方式来配置Bean实例时,可以通过scope来指定Bean实例的作用域,没有指定scope属性的Bean实例的作用域默认是singleton。当我们采用零配置方式来管理Bean实例时,可以使用@Scope Annotation,只要在该Annotation中提供作用域的名称即可。例如:@Scope("prototype")@Component("axe")public原创 2013-07-28 05:04:53 · 686 阅读 · 0 评论 -
7.8.4: 容器中的 工厂Bean
此处的工厂Bean,与前面介绍的实例工厂方法创建Bean,或者静态工厂方法创建Bean的工厂有所区别:前面那些工厂是标准的工厂模式,Spring只是负责调用工厂方法来创建Bean实例;此处的 工厂Bean 是Spring的一种特殊Bean,这种工厂Bean必须实现FactoryBean接口。FactoryBean接口是工厂Bean的标准接口,实现该接口的Bean通常只能作为工厂Bean使用原创 2013-07-27 06:32:10 · 884 阅读 · 0 评论 -
基于Annotation的Spring AOP: @AfterReturning
AfterReturning增强处理将在目标方法正常完成后被织入:使用@AfterReturning可指定如下两个属性:① pointcut / value : 两者都用于指定该切入点对应的切入表达式② returning : 指定一个返回值形参名,增强处理定义的方法可通过该行参名来访问目标方法的返回值。Person.java :public interface Per原创 2013-08-03 06:20:37 · 12964 阅读 · 0 评论 -
8.2.1: 搜索Bean类
如果我们不使用xml配置文件来配置Bean实例,那么我们只能指望Spring会自动搜索某些路径下的Java类,并将这些Java类注册成Bean实例。Spring要求程序员显式指定搜索哪些路径下的Java类,Spring将会把合适的Java类全部注册成Spring Bean。现在的问题是:Spring怎么知道应该把哪些Java类当成Bean类处理呢?这就需要使用Annotation了,Sprin原创 2013-07-28 04:57:27 · 1136 阅读 · 0 评论 -
8.4.1: AspectJ 实现AOP的准备
AOP 专门用于处理系统中分布于各个模块(不同方法)中的交叉关注点问题,在JavaEE应用中,常常通过AOP来处理一些具有横切性质的系统级服务,如事务管理、安全检查、缓存、对象池管理等,AOP已经成为一种非常常用的解决方案。AspectJ:AspectJ是一个基于Java语言的AOP框架,提供了强大的AOP功能,其他很多AOP框架都借鉴或采纳了它的一些思想。由于Spring3.0的AOP与原创 2013-07-26 17:51:52 · 884 阅读 · 0 评论 -
基于Annotation的Spring AOP: @AfterThrowing
@AfterThrowing 主要用于处理程序中未处理的异常。使用@AfterThrowing 时可指定如下两个属性:① pointcut / value : 用于指定该切入点对应的切入表达式。② throwing : 指定一个返回值形参名,增强处理定义的方法可通过该形参名来访问目标方法中所抛出的异常对象。Person.java :public interface Pe原创 2013-08-03 07:12:53 · 19404 阅读 · 1 评论 -
基于Annotation的Spring AOP: @Before
AspectJ 允许使用Annotation定义切面、切入点和增强处理,而 Spring框架则可识别并根据这些Annotation来生成AOP代理。Spring只是使用了和AspectJ一样的注解,并没有使用AspectJ的编译器和织入器,底层依然使用的是 Spring AOP,依然是在运行时动态生成AOP代理,并不依赖于AspectJ的编译器或者织入器。为了启用Spring对@Aspec原创 2013-08-03 05:39:03 · 3388 阅读 · 0 评论 -
7.8.5: 获得Bean部署时的id
在之前的例子中,程序总是通过Bean id获得Bean对象。但是在实际中,一个Bean与Bean之间的关系是通过依赖注入管理的,常常不会通过调用容器的getBean方法来获取Bean实例。可能的情况是:应用中已经获得了Bean实例的引用,但程序无法知道配置该Bean时指定的id属性,而程序又需要配置该Bean时指定的id属性。原创 2013-07-28 00:09:57 · 844 阅读 · 0 评论 -
Spring AOP中使用args表达式访问目标方法的参数
如果只要访问目标方法的参数,Spring还提供了一种更简单的方法:我们可以在程序中使用args来绑定目标方法的参数。如果在一个args表达式中指定了一个或多个参数,则该切入点将只匹配具有对应形参的方法,且目标方法的参数值将被传入增强处理方法。原创 2013-08-04 03:01:51 · 13151 阅读 · 1 评论 -
Spring整合JDBC
bean.xml :<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/conte原创 2013-08-09 21:22:14 · 680 阅读 · 0 评论 -
Spring提供的DAO支持
DAO模式 是一种标准的JavaEE设计模式,DAO模式的核心思想是:所有的数据库访问,都通过DAO组件完成,DAO组件封装了数据库的增删改等原子操作。业务逻辑组件依赖于DAO组件提供的数据库原子操作,完成系统业务逻辑的实现。DAO组件是整个JavaEE应用的持久层访问的重要组件,每个JavaEE应用的底层实现都难以离开DAO组件的支持。Spring对实现DAO组件提供了许多工具类,系统的DA原创 2013-08-09 10:56:09 · 1505 阅读 · 0 评论 -
Spring整合Struts2方式一:让Spring容器管理控制器
web.xml :<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java原创 2013-08-08 11:59:49 · 954 阅读 · 0 评论 -
MVC框架与Spring整合的思考
对于一个基于B/S架构的JavaEE应用而言,用户请求总是向MVC框架的控制器请求,而当控制器拦截到用户请求后,必须调用业务逻辑组件来处理用户请求。此时有一个问题:控制器应该如何获得业务逻辑组件?最容易想到的策略是,直接通过 new 关键字创建业务逻辑组件,然后调用业务逻辑组件的方法,根据业务逻辑方法的返回值确定结果。在实际开发中,很少采用上面的策略,因为这是一种非常差的策略。原因有三:原创 2013-08-08 10:32:55 · 815 阅读 · 0 评论 -
Spring整合Struts2之启动Spring容器
实际开发中,项目多数会选择使用Spring整合Struts2框架。对于使用Spring框架的Web应用,我们不能手动创建Spring容器,而是通过配置文件,声明式地创建Spring容器。为了让Spring容器随着Web应用的启动而自动地创建起来,可以借助于ServletContextListener监听器完成,该监听器可以在Web应用启动时回调自定义方法从而创建Spring容器。Spring提原创 2013-08-08 07:29:52 · 1373 阅读 · 0 评论 -
使用@Transactional
Spring 还允许将事务配置放在Java类中定义,这需要借助于@Transactional注解,该注解既可用于修饰Spring Bean类,也可用于修饰Bean类中的某个方法。使用@Transactional修饰Bean类,表明这些事务设置对整个Bean类起作用;使用@Transactional修饰Bean类中的某个方法,表明这些事务设置只对该方法有效。使用@Transactiona原创 2013-08-07 05:59:12 · 1132 阅读 · 0 评论 -
Spring1.x使用TransactionProxyFactoryBean创建事务代理
Spring同时支持编程式事务策略和声明式事务策略,在实际开发中,几乎都采用声明式事务策略。使用 声明式事务策略的优势 十分明显:① 声明式事务能大大降低开发者的代码书写量,而且声明式事务几乎不影响应用的代码。因此,无论底层事务策略如何变化,应用程序都无须任何改变。② 应用程序代码无须任何事务处理代码,可以更关注于业务逻辑的实现。③ Spring可对任何POJO的方法提供事务管原创 2013-08-07 02:33:52 · 1049 阅读 · 0 评论 -
Spring支持的事务策略
JavaEE应用的传统事务有两种策略:全局事务和局部事务。全局事务由应用服务器管理,需要底层服务器的JTA支持。局部事务和底层所采用的持久化技术有关,当采用JDBC持久化技术时,需要使用Connection对象来操作事务;而采用Hibernate持久化技术时,需要使用Session对象来操作事务。当采用传统的事务编程策略时,程序代码必然和具体的事务操作代码耦合,这样造成的后果是:当应用原创 2013-08-07 00:05:09 · 1135 阅读 · 0 评论 -
Spring2.x的事务配置策略
Spring1.x 的声明式事务使用TransactionProxyFactoryBean配置策略简单易懂,但是配置起来极为繁琐:每个目标Bean都需要额外配置一个TransactionProxyFactoryBean代理,这种方式将导致配置文件急剧增加。Spring 2.x 的XML Schema方式提供了更简洁的事务配置策略,Spring2.x提供了tx命名空间来配置事务管理,tx命名空间原创 2013-08-07 05:28:54 · 925 阅读 · 0 评论 -
基于Annotation的Spring AOP: @Around
@Around 增强处理是功能比较强大的增强处理,它近似等于Before 和 AfterReturning的总和。@Around既可在执行目标方法之前织入增强动作,也可在执行目标方法之后织入增强动作。@Around甚至可以决定目标方法在什么时候执行,如何执行,更甚者可以完全阻止目标方法的执行。@Around可以改变执行目标方法的参数值,也可以改变执行目标方法之后的返回值。@Arou原创 2013-08-03 22:32:20 · 24465 阅读 · 1 评论 -
定义切入点
我们在前面的文章中,在一个切面类中定义了4个增强处理,定义4个增强处理时分别指定了相同的切入点表达式,这种做法显然不太符合软件设计的原则:我们居然将那个切入点表达式重复了4次,如果有一天需要修改这个切入点表达式,那就要修改4个地方。如果重复了更多次呢?岁,我们就得修改更多次。为了解决这个问题,AspectJ和Spring都允许定义切入点。所谓 定义切入点,其实质就是为一个切入点表达式起一个名称原创 2013-08-04 06:49:52 · 1826 阅读 · 0 评论 -
Spring AOP: 织入的顺序
Spring AOP 采用和 AspectJ 一样的优先顺序来织入增强处理:在进入连接点时,高优先级的增强处理将先被织入;在退出连接点时,高优先级的增强处理会后被织入。当不同的切面里的两个增强处理需要在同一个连接点被织入时,Spring AOP将以随机的顺序来织入这两个增强处理。如果应用需要指定不同切面类里增强处理的优先级,Spring提供了如下两种解决方案:① 让切面类实现org.s原创 2013-08-04 02:49:23 · 16452 阅读 · 1 评论 -
7.8.2: 使用子Bean
随着应用程序规模的增大,Spring配置文件的增长速度更快。当应用中组件越来越多时,Spring配置文件里的Bean配置也随之大幅度增加,慢慢地就会出现一种现象:有一批Bean配置的大量配置信息完全相同,只有少量配置不同。那么我们是否有办法来简化这种配置呢?Spring提供了 Bean继承 来应对这个问题。Spring可以先为这批Bean配置一个Bean模板,将这批Bean中相同的配置信息配置原创 2013-07-27 05:20:46 · 709 阅读 · 0 评论 -
7.8.1: 使用抽象Bean
Spring框架绝大部分工作都集中在 对容器中Bean的管理 上,包括管理容器中Bean的生命周期,使用Bean继承等特殊功能。通过这些深入的管理,应用程序可以更好地使用这些Java组件。所有 抽象Bean,都是指定abstract属性为true的Bean,抽象Bean不能被实例化,Spring容器不会创建抽象Bean的实例。抽象Bean的价值在于被继承,抽象Bean通常作为父Bean被继承。原创 2013-07-27 05:03:50 · 796 阅读 · 0 评论 -
8.4.2: AspectJ 实现AOP
我们在C盘下写一个Hello.java :package lee;public class Hello{ public static void main(String[] args){ Hello h=new Hello(); h.sayHello(); } public void sayHello(){ System.out.println("Hello A原创 2013-07-26 18:52:00 · 735 阅读 · 0 评论 -
7.5.1: Bean的基本定义
从本质上来看,Spring容器就是一个超大型工厂,Spring容器中的Bean就是该工厂的产品。Spring容器能产生哪些产品,则完全取决于开发者在配置文件中的配置。元素是Spring配置文件的根元素,该元素可以指定如下属性:beans元素的属性属性名说明deafult-lazy-init指定该beans元素下配置的所有Bean默认的延迟初始化行为原创 2013-07-17 03:50:35 · 807 阅读 · 0 评论 -
7.5.9: 组合属性名称
当在配置文件中为Bean属性指定值时,还可以使用组合属性名的方式。例如我们使用如foo.bar.name的属性名,这表明为Bean实例的foo属性的bar属性的name属性指定值。Person.java :public class Person { private String name; public String getName() { return name; }原创 2013-07-18 05:03:33 · 948 阅读 · 0 评论 -
7.5.8:注入集合值
如果Bean的属性是个集合,则可以使用集合元素 、 、和元素分别用来设置类型为List、Set、Map和Properties的集合属性值。Axe.java :public interface Axe { public String chop();}StoneAxe.java :public class StoneAxe implements Axe { @Overrid原创 2013-07-18 04:16:19 · 675 阅读 · 0 评论 -
7.5.4:设置普通属性值
元素用于指定字符串类型、基本类型的属性值。原创 2013-07-18 00:47:51 · 682 阅读 · 0 评论 -
7.5.2:容器中Bean的作用域
当通过Spring容器创建一个Bean实例时,不仅可以完成Bean实例的实例化,还可以为Bean指定特定作用域。Spring支持如下5种作用域:Spring支持的作用域作用域说明singleton单例模式,在整个Spring IOC容器中,使用singleton定义的Bean将只有一个实例。prototype原型模式,每次通过容器的get原创 2013-07-17 18:47:17 · 605 阅读 · 0 评论 -
7.5.5:配置合作者Bean
如果需要为Bean设置的属性值是容器中的另一个Bean实例,则应该使用元素。使用ref元素时可指定如下两个属性:① bean:引用不在同一份XML配置文件中的其他Bean实例的id属性值。② local:引用同一份XML配置文件中的其他Bean实例的id属性值。 与注入普通属性值类似的是,注入合作者Bean也有一种简洁的写法:原创 2013-07-18 01:20:01 · 540 阅读 · 0 评论 -
7.5.3:配置依赖
Bean的 依赖注入 通常表现为如下两种形式:① 属性:通过元素配置,对应设值注入。② 构造器参数:通过元素指定,对应构造注入。通常情况下,Spring在实例化容器时,会校验BeanFactory中每一个Bean的配置,这些校验包括:① Bean引用的依赖Bean是否指向一个合法的Bean。② Bean的普通属性值是否获得了一个有效值。对于singleton作用原创 2013-07-18 00:02:40 · 570 阅读 · 0 评论 -
Spring的第一个小程序
在MyEclipse6.5中新建一个web工程,取名spring2.5.6。将Spring2.5.6分发包下dist目录下的spring.jar和分发包下的lib->jakarta-commons下的commons-logging.jar拷贝到工程的lib目录下。在src目录下新建一个applicationContext.xml文件,内容参考spring分发包->samples->imagedb-原创 2013-07-16 18:47:17 · 647 阅读 · 0 评论 -
7.3.3:构造注入
构造注入指的是在构造实例时,已经为其完成了依赖关系的初始化。这种利用构造器来设置依赖关系的方式,称为构造注入。Chinese.java :public class Chinese implements Person { private Axe axe; public Chinese() { } public Chinese(Axe axe) { this.axe =原创 2013-07-16 22:59:31 · 638 阅读 · 0 评论