Spring IoC和AOP使用扩展(二)

一、IOC的实现方式:

  Set注入:熟悉必须有公共set方法;

  构造器注入:可以根据构造器参数名称、下标注入;

  p命名空间注入:要求有set方法;

  

  

  

  内部bean的实现;


<bean id="userService" class="com.service.UserService">
<property name="userDao">
<bean class="com.dao.UserDao"></bean>
</property>
<!-- 第一种方式 -->
<!-- <constructor-arg > -->
<!-- 设置local属性默认在当前文件中找 -->
<!-- <ref local="userDao"/> -->
<!-- 设置local属性默认在全部文件中找 -->
<!-- <ref bean="userDao"/> -->
<!-- </constructor-arg> -->
<!-- 第二种方式 -->
<property name="list">
<list>
<value>qwe</value>
<value>123</value>
</list>
</property>

</bean>

  

  各种数据类型的注入:

list集合的注入
<property name="list"><!-- 给list集合注入 -->

<list>

<value>沾上干</value>

<value>房顶上</value>

</list>

</property>

set集合的注入
<property name="set"><!-- 给set集合注入 -->

<list>

<value>aaa</value>

<value>bbb</value>

</list>

</property>

 数组的注入
<property name="strs"><!-- 给数组注入 -->

<list>

<value>沾上干1!</value>

<value>房顶上2!</value>

</list>

</property>

 map集合的注入
<property name="map"><!-- 给map集合注入 -->

<map>

<entry key="aaa" value="111"></entry>

<entry key="bbb" value="222"></entry>

</map>

</property>

 属性文件的注入
<property name="prop"><!-- 给属性文件集合注入 -->

<props>

<prop key="a">!!!</prop>

<prop key="b">!!???</prop>

</props>

</property>

 注入null值
<property name="NULL"><!-- 注入null值 -->

<null></null>

</property>

注入空串

<property name="KC"><!-- 注入空串 -->

<value></value>

</property>

  二、常用的增强处理

before

 前置之增强处理,在目标方法执行之前织入增强处理
 AfterReturning  后置增强处理,在目标方法正常执行(不出现异常)后织入增强处理
 AfterThrowing  异常增强处理,在目标方法抛出异常后织入增强处理
 after  最终增强处理,不管方法是否抛出异常,都会在目标方式执行之后执行
 Around  环绕增强处理,在目标方法前后都可以织入增强处理

  

    

    

  

    属性throwing的值,必须和增强方法的异常参数名一致

   

  三、Spring注解

  @Component:实现Bean组件的定义

  @Repository  :用于标注DAO类

  @Service   :用于标注业务类

  @Controller    :用于标注控制器类

  1、基本类的注解

    在要创建实力的(dao)类上使用对应到@Repository该注解的作用,就等价于:

      <bean id="userDao" class="com.dao.UserDao"></bean>

    类上的注解,spring容器不知道,需要spring扫描,扫描的多个包用逗号隔开

      <context:component-scan base-package="com.dao,com.tools" />

    

  2、环绕通知的注解(AOP注解)

    

      注意:核心配置文件中一定要让spring启用对于@AspectJ注解的支持

    

    3、切点的签名


@Component
@Aspect
public class MyLogger {
  @Pointcut("execution(* com.dao.*.*(..))")
  public void cut(){}

  @Around("cut()")
  public void show(ProceedingJoinPoint join){
    System.out.println("环绕增强已经执行");
  }
}

    4、环绕通知加注解


@Aspect //等价于<aop:aspect ref="myLogger"> 定义一个切面,引用它下面的类
@Component //等价于<bean id="myLogger" class="com.tools.MyLogger" />
//描述一个实例
public class MyLogger {
  @Pointcut("execution(* com.dao.*.*(..))")
  public void xx(){}//切点规则签名

  @Around("xx()")
  //代表的是通知的类型(切点的规则)
  public void printLogger(ProceedingJoinPoint join){
    System.out.println("环绕通知执行前");
try {
  join.proceed();
} catch (Throwable e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("环绕通知执行后");
}
@Before("xx()")
public void before(){
System.out.println("前置通知");
}
}

  

原文地址:https://www.cnblogs.com/newbest/p/9191399.html

时间: 2024-07-28 18:10:08

Spring IoC和AOP使用扩展(二)的相关文章

Spring IOC及AOP学习总结

一.Spring IOC体系学习总结: Spring中有两个容器体系,一类是BeanFactory.另一类是ApplicationContext.BeanFactory提供了基础的容器功能.ApplicationContext则是基于BeanFactory建立的一套更加丰富的容器体系,基于ApplicationContext构建了Spring AOP体系(基于AOP体系又构建了声明式事务模型),I18n的支持,基于观察者模式的事件模型,多渠道的Bean资源的载入(比如从文件系统,从interne

Spring IOC 和 AOP

Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架. 1.控制反转(IOC)/依赖注入(DI): 在传统的程序设计中,当调用者须要被调用者的协助时,通常由调用者来创建被调用者的实例. 但在spring里创建被调用者的工作不再由调用者来完毕.因此控制反转(IoC),为什么称为反转呢?反转是相对于正向而言的,那么什么算是正向的呢?考虑一下常规情况下的应用程序,假设要在A里面使用C,你会怎么做呢?当然是直接去创建C的对象,也就是说,是在A类中主动去获取所须要的外部资源C.这样的

spring - ioc和aop

1.程序中为什么会用到spring的ioc和aop 2.什么是IOC,AOP,以及使用它们的好处,即详细回答了第一个问题 3.原理 关于1: a:我们平常使用对象的时候,一般都是直接使用关键字类new一个对象,那这样有什么坏处呢?其实很显然的,使用new那么就表示当前模块已经不知不觉的和 new的对象耦合了,而我们通常都是更高层次的抽象模块调用底层的实现模块,这样也就产生了模块依赖于具体的实现,这样与我们JAVA中提倡的面向接口面向抽象编程是相冲突的,而且这样做也带来系统的模块架构问题.很简单的

【Java】模拟Sping,实现其IOC和AOP核心(二)

接着上一篇,在上一篇完成了有关IOC的注解实现,这一篇用XML的方式实现IOC,并且完成AOP. 简易的IOC框图 注解的方式实现了左边的分支,那么就剩下右边的XML分支: XmlContext:这个类是也是AbstractApplicationContext的子类,和AnnotationContext相似,只不过这里是要解析XML文件而不是注解:(关于XML文件的解析之前给过一篇博客:[Java]XML文件的解析对于XML文件的处理,是不太容易的,会产生很多问题,后面只是实现核心步骤,很多属性

spring ioc和aop理解

spring IOC 1.目的:就是解决程序间的依赖关系 2.原理:通过反射原理将我们控制层中的 dao层. service层类以工厂模式在static代码块中实现加载后存放入map中 , 并实现单列 . 原文地址:https://www.cnblogs.com/cwone/p/11939192.html

Spring+IOC(DI)+AOP概念及优缺点

Spring pring是一个轻量级的DI和AOP容器框架. 说它轻量级有一大部分原因是相对与EJB的(虽然本人从没有接触过EJB的应用),重要的是,Spring是非侵入式的,基于spring开发的应用一般不依赖于spring的类. 容器:Spring是个容器,因为它包含并且管理应用对象的生命周期和配置.如对象的创建.销毁.回调等. 框架:Spring作为一个框架,提供了一些基础功能,(如事务管理,持久层集成等),使开发人员更专注于开发应用逻辑. Spring的优点1.降低了组件之间的耦合性 ,

Spring IOC 和 AOP概述

IoC(控制反转,(Inversion of Control):本来是由应用程序管理的对象之间的依赖关系,现在交给了容器管理,这就叫控制反转,即交给了IoC容器,Spring的IoC容器主要使用DI方式实现的. 不需要主动查找,对象的查找.定位和创建全部由容器管理 DI(Dependency Injection) : IOC 的另一种表述方式:即组件以一些预先定义好的方式(例如: setter 方法)接受来自如容器的资源注入. 相对于 IOC 而言,这种表述更直接 1.大量减少了Factory和

对Spring IOC和AOP的理解

控制反转(IOC)是什么?(理解好Ioc的关键是要明确"谁控制谁,控制什么,为何是反转(有反转就应该有正转了),哪些方面反转了") 1.Ioc-Inversion of Control:即"控制反转",不是什么技术,而是一种设计思想.在Java开发中,Ioc意味着将你设计好的对象交给容器控制,而不是传统的在你的对象内部直接控制. 2.谁控制谁,控制什么:传统Java SE程序设计,我们直接在对象内部通过new进行创建对象,是程序主动去创建依赖对象:而IoC是有专门一

关于spring,IOC和AOP的解析原理和举例

引用自:https://blog.csdn.net/paincupid/article/details/43152397 IOC:就是DAO接口的实现不再是业务逻辑层调用工厂类去获取,而是通过容器(比如spring)来自动的为我们的业务层设置DAO的实现类.这样整个过程就反过来,以前是我们业务层主动去获取DAO,而现在是DAO主动被设置到业务逻辑层中来了,这也就是反转控制的由来.通过IOC,我们就可以在不修改任何代码的情况下,无缝的实现数据库的换库迁移,当然前提还是必须得写一个实现特定数据库的D