为了账号安全,请及时绑定邮箱和手机立即绑定
  • 相关代码——(上): @TestJavaBased.java @RunWith(BlockJUnit4ClassRunner.class) public class TestJavaBased extends UnitTestBase{ public TestJavaBased(){ super("classpath*:spring-beanannotation.xml"); } @Test public void testG(){ StringStore store=super.getBean("stringStoreTest"); } } @Store.java package com.imooc.annotation.javabased; public interface Store<T> { } @StringStore.java package com.imooc.annotation.javabased; public class StringStore implements Store<String> { } @IntegerStore.java package com.imooc.annotation.javabased; public class IntegerStore implements Store<Integer> { } 【温馨提示:JavaSE/EE、SSH/SSM、Hybrid APP、JQ/JS/CSS3/H5等编程爱好者关注我,加我慕课好友,互相学习,共同进步!】
    查看全部
  • Bean生命周期:定义——初始化——使用——销毁 一、初始化: 方法1.实现org.springframework.beans.foctory.InitializingBean接口,覆盖afterPropertiesSet方法。系统会自动查找afterPropertiesSet方法,执行其中的初始化操作。 方法2.配置init-method 例如设置bean中init-method="init"那么在初始化过程中就会调用相应class指定类的init()方法进行初始化工作。 二、销毁(与初始化类似): 方法1.实现org.springframework.beans.foctory.DisposableBean接口,覆盖destory方法。 方法2.配置destory-method。 三、配置全局初始化、销毁方法(属于默认配置,参考截图) 注意: 1、当三种方式同时使用时,全局(默认的)初始化销毁方法会被覆盖。 2、另外实现接口的初始化/销毁方式会先于配置文件中的初始化/销毁方式执行,然后再执行配置的。//初始化(接口式)——初始化(<bean>标签配置)——销毁(接口式)——销毁(<bean>标签配置) 3、即使没有以上三种初始化方法也是可以编译执行。 4、如果配置全局初始化、销毁,但没有写对应方法,则可通过编译;如果在<bean>标签中配置初始化、销毁,但没有写对应方法,则报错。
    查看全部
  • Bean的初始化和销毁的行为可以有三种自定义方式 1)在Spring.xml配置指定全局的针对所有bean的初始化method 和 销毁method 2)在Spring.xml对指定的Bean ID, 定义它的初始化和销毁method 3)在Bean对应的类Implement 接口 ,override method 对于一个bean,仅当没有定义方式2和3的情况下,方式1才会生效。 当方式2和3都定义的情况下,先执行方式3的method,然后才执行方式2定义的method
    查看全部
  • aop:after 所指定的切面方法,会在对应类中的方法执行完后再执行。 before所指定的切面方法 会在监控的方法执行前执行; after-returning所指定的切面方法 会在监控方法正常执行结束后执行; after-throwing所指定的切面方法 会在监控方法抛出异常时执行; after所指定的切面方法 会在监控方法执行结束后,无论方法执行时是否有异常抛出,均会执行此切面方法。
    查看全部
  • 在传统AOP的实现中,需要在XML文档中手动引入ProxyFactoryBean. 通过getBean()方法获取该bean对应的id不是ProxyFactoryBean的实例本身,而是这个类的getObject()方法创建的对象. getObject()方法将创建一个AOP代理的目标对象. <aop:aspectj-autoproxy ></aop:aspectj>标签中与ProxyFactoryBean中有proxyTargetClass属性,当该属性设置为true时,会强制使用CGLIB动态代理,默认为false. 如果ProxyFactoryBean的proxyInterfacs属性没有被设置,但是目标类实现了一个(或者更多)接口,那么ProxyFactoryBean将自动检测到这个目标类已经实现了至少一个接口,创建一个基于JDK的代理. 在Spring实现AOP的方式中,不需要引入ProxyBeanFactory类了,直接使用<aop:config>标签与注解来进行配置即可.
    查看全部
  • (3) Bean的自动装配【Autowiring】<beans Autowiring="" > (1. No:不做任何操作 (2. byname:【检查ID】根据属性名自动装配。此选项将检查容器并根据名字查找与属性完全一致的bean ,并将其与属性自动装配【设置注入省去编写<property name>】 (3. byType:【检查Class】如果容器中存在一个与指定属性类型相同的bean,那么将与该属性自动装配; 如果存在多个该类型bean,那么抛出异常,并指出不能使用不byType方式进行自动装配;如 果没有找到相匹配的bean,则什么事都不发生【设置注入省去编写<property class>】 (4. Constructor:【检查Class】与byType方式类似,不同之处在于它应用于构造器参数。如果容器中没 有找到与构造器一致的bean,那么抛出异常【构造注入省去<constructor-arg】
    查看全部
  • 通知<br> @Pointcut("execution(* com.dream.aop.*.*.*(..))") 1.@Before("表示式、连接点方法名()")<br> 2.@AfterReturing 可以使用returing绑定返回值 Object<br> 3.@AfterThrowing throwing同上<br> 4.@After finally<br> 5.@Around 第一个参数必须是ProceedingJoinPoint proceed(),proceed(Object[])
    查看全部
  • spring framework
    查看全部
    2 采集 收起 来源:Spring概况

    2015-09-11

  • Bean的相关属性和我在JSP中的servlet的属性一样,有定义,初始化,使用,销毁。
    查看全部
  • 1.Spring对AspectJ的支持 @AspectJ的风格类似纯java注解的普通java类 Spring可以使用AspectJ来做切入点解析 AOP的运行时仍旧是纯的SpringAOP,对AspectJ的编译器或者织入无依赖性 2.对@AspectJ支持可以使用XML或Java风格的配置 @Configuration @EnableAspectJAutoProxy public class AppConfig{} <aop:aspectj-autoproxy/> 3.@AspectJ切面使用@AspectJ注解配置,拥有@Aspect的任何bean将被Spring自动识别并应用。 用@AspectJ注解的类可以有方法和字段,他们也可能包括切入点(pointcut),通知(Advice)和引入(introduction)声明 4.@AspectJ注解是不能够通过类路径自动检测发现的,所以需要配合使用@Conponent注释或者在XML中配置bean 5.一个类中的@AspectJ注解标始它为一个切面,并且将自己从自动代理中排除 6.AspectJ是编译期的AOP,检查代码并匹配连接点与切入点的代价是昂贵的。 一个好的切入点应该包括以下; ①选择特定类型的连接点,如:execution,get,set,call,handler ②确定连接点范围,如:within,withincode ③匹配上下文信息,如;this.targe,@annotation
    查看全部
  • 构造注入
    查看全部
    2 采集 收起 来源:Spring注入方式

    2015-05-24

  • ldy
    如何学习 Spring 掌握用法 深入理解 不断实践 反复总结 再次深入理解与实践 http://spring.io/ http://projects.spring.io/spring-framework/
    查看全部
  • AOP,面向切面编程,与垂直业务功能,实现程序功能的统一维护。

    主要功能:日志记录,性能统计,安全控制,事物处理,异常处理等等。(事务处理:任何操作数据库的方法,尤其是增删改,需要事物的处理,使用AOP时,执行到某种类型的方法,或者某一层的类,自动开启事务和获取连接、提交事务、关闭事务的步骤,简化了操作)

    AOP实现方式:1、预编译方式。(AspectJ) 2、运行期动态代理。(JDK动态代理、CGLib动态代理)(SpringAOP、JbossAOP)

    切面的理解:例如系统中有产品管理、订单管理、服务管理等等模块(子功能),任一模块(子功能),都需要记录它的日志,控制它的事务,以及做一些安全验证的功能。但是如果在每一个模块(子功能)中去设计日志、事务、安全验证,会带来大量工作量,尤其当项目达到一定规模时,比如修改日志记录的方式,那么则需要修改每一个模块的日志功能,通过切面方式对开发人员是不可见的,当执行任一模块时,通过预编译或者运行期动态代理方式,都会去记录它的日志,实现了一处写功能,处处可实现的方式,对于开发人员允许不知道有这样功能的存在,这样就简化了操作(修改日志、编写事物等),业务功能横向走,切面垂直业务功能。

    二、AOP基本概念(切面—>织入—>目标对象—>切入点—>连接点—>通知—>引入—>AOP代理:“切面”要执行的动作,通过“织入”与所有功能模块进行联系,又通过“目标对象”找到具体功能模块,通过“切入点”将要查找某个功能的某个方法,通过“连接点”找到该功能的特定方法的开始,通过“通知”将要执行何种切面的动作,通过“引入”引入该动作用到的对象和方法,通过“AOP代理”实现该方法。)

    AOP相关概念:

    1、切面(Aspect):一个关注点(事务),这个关注点可能会横切多个对象(产品管理、订单管理)。

    2、连接点(Joinpoint):程序执行过程中的某个特定的点。(一个类中执行的某个方法的开始)。

    3、通知(Advice):在切面的某个特定的连接点上执行的动作(方法执行的时候,切面额外执行的动作,比如说方法执行时,开启事物提交功能)。

    4、切入点(Pointcut):匹配连接点的断言,在AOP中通知和一个切入点表达式关联(在切面中匹配一个具体的连接点(某个功能的方法的开始))。

    5、引入(Introduction):在不修改类代码的前提下,修改的是字节码文件,为类添加新的方法和属性。(类似于编译期动态的修改class文件去增加新的属性和方法,源代码中并没有这样的属性和方法),取决于使用AspectJ和SpringAOP的实现方式,使用方式不同,为类添加属性和方法的方式是有区别的。

    6、目标对象(Target Object):被一个或者多个切面所通知的对象。(例如存在一个订单的service(对象)和一个商品的service(对象),执行该模块的功能时,切面会通知相对应的service,在执行数据库操作时,去加上事物的控制,这两个service就是目标对象)。

    7、AOP代理(AOP  Proxy):AOP框架创建的对象,用来实现切面契约(aspect contract),包括通知方法执行等功能(这里执行的方法指的是切面里的执行相应操作所用到的方法)开发时不知道这个对象存在的,也不清楚会创建成什么样子。

    8、织入(Weaving):把切面连接到其他的应用程序类型或者对象上,并创建一个被通知的对象,分为:编译时织入、类加载时织入、执行时织入。(使切面和对象(模块功能)牵连起来)

    Advice(通知)的类型(在切面某个特定连接点执行的动作)

    前置通知(Before advice):在某连接点(join point)(某个功能方法开始执行前)之前执行的通知,但不能阻止连接点前的执行(除该方法外的其他方法的执行)(除非它抛出一个异常)。

    返回后通知(After returning advice):在某连接点(方法)正常完成后执行的通知(将要执行的切面功能)。

    抛出异常后通知(After throwing advice):在方法抛出异常退出时执行的通知(将要执行切面的功能)。

    后通知(After(finally)advice):当某连接点(方法)退出的时候执行的通知(切面将要执行的功能)(不论是正常返回还是异常退出都会执行的通知)。

    环绕通知(Around Advice):包围一个连接点(join point)的通知(在整个方法的内部都有切面要执行的功能存在,不分前后)。


    Spring框架中AOP的用途:

    用途1:提供了声明式的企业服务(也可以是其他服务,例如互联网服务),特别是EJB(重量级框架)的替代服务的声明。

    用途2:允许用户定制自己的方面(切面),以完成OOP(面向对象编程,模拟世界中行为和方式,可以理解为实现一个功能的顺序)与AOP(横切的方式,可以理解为各个功能之间横切的一种功能)的互补使用,可以实现自己横切的功能。

    三、Spring中的AOP(Spring中AOP的实现方式以及特点)

    特点1:纯java实现,无需特殊的编译过程(普通代码需要加载才能执行),不需要控制类加载器层次。可以更好的进行控制(使用类加载器应当谨慎,容易方法生ClassNotFound异常这种情况)。

    特点2:目前只支持方法执行连接点(通知Spring Bean的方法执行),(在执行某方法时,才去执行切面的功能)。

    特点3:SpringAOP不是为了提供最完整的AOP实现(尽管它非常强大);而是侧重于提供一种AOP实现和Spring IoC容器之间的整合,用于帮助解决企业应用中的常见问题。

    特点4:SpringAOP不会与AspectJ(完整的、全面的AOP解决方案)竞争,也不会提供综合全面的AOP解决方案。

    有接口和无接口的SpringAOP实现区别:(一个类是否实现了某个接口,例如一个ProductService接口,一个ProductServiceImpl实现了该接口,在这类上切入的切面就是有接口的AOP)

    SpringAOP对于有接口的使用标准的JavaSE动态代理作为AOP代理,这使得任何接口(或者接口集)都可以被代理。

    SpringAOP对于没有接口的实现类中使用CGLIB代理(如果一个业务对象并没有实现一个接口)

    四、Schema-based 实现AOP(基于配置文件实现AOP)

    五、API实现AOP(基于API实现AOP)

    六、AspectJ实现AOP

    查看全部
  • Spring 注入是指在启动Spring容器加载bean配置的时候完成对变量的赋值行为。注入方式分为:设值注入和构造注入。设值注入和构造注入则通过配置上的差异来区分。

    查看全部
    2 采集 收起 来源:Spring注入方式

    2019-08-03

  • Spring资源:

    https://spring.io/

    https://spring.io/projects/spring-framework

    查看全部

举报

0/150
提交
取消
课程须知
Java的高级课程,适合对Java基础知识应用自如,并熟悉MVC架构的小伙伴们。如果想成为一名Java工程师,这门课程是一定要学哒。
老师告诉你能学到什么?
掌握依赖注入、IOC和AOP的概念,并能进行简单应用。

微信扫码,参与3人拼团

意见反馈 帮助中心 APP下载
官方微信
友情提示:

您好,此课程属于迁移课程,您已购买该课程,无需重复购买,感谢您对慕课网的支持!