SSH——Ch8:Spring---1.依赖注入;2.AOP

注: 这一章不需要建Web项目

1。怎样做依赖注入?

a.加入包,注:依赖注入只加入一个Spring Core这个核心包就好了。AOP则要加入AOP包

image

b.由于代码较多,就只列一个包资源管理器的图看一下吧

image

c.配置时应该这样配置:

<bean id="colorInk" class="com.yenange.entity.ColorInk"> </bean>
<bean id="blackInk" class="com.yenange.entity.BlackInk"> </bean>
<bean id="a4paper" class="com.yenange.entity.A4paper"> </bean>
<bean id="b5paper" class="com.yenange.entity.B5paper"> </bean>

<bean id="printer" class="com.yenange.entity.Printer">
    <property name="ink" ref="blackInk"></property>
    <property name="paper" ref="b5paper"></property>
</bean>

 

规律:

1、实现类:在bean里面直接配就好了;相当于:

    ColorInk colorInk=new ColorInk();//……

2、普通类中的接口属性

    id和class是同上面,

    属性如果是普通的字段,如String,int 类型等,用value=”……”就好了;

    属性如果是接口或类,则ref=”……”

    注:要用到依赖注入,则属性一定要有setter方法,否则不行。

d.做测试:

        ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
        Printer p=(Printer)context.getBean("printer");
        p.print("红色","b5","打印内容测试");

对于Spring来说,这应该是最简单的部分了吧。

2.怎么样配置AOP?

a. 加入Spring AOP包;上面有图;

b. 要拦截方法,那这个方法必定在一个类中,但是:这个类必须实现一个接口,Spring才能拦截。

c. 拦截了方法, 总得做什么事吧,这个事就是通知:Advice, 分前置通知、后置通知、环绕通知、异常通知。通知也要建立一个类,类里面有一个继承好的方法。

d. 上一些代码,好看一点吧。

想拦截的方法:

package com.yenange.biz;

public class Teacher implements ITeacher {
    public void giveLessson(String teacher, String content) {
        System.out.println(teacher+"开始上课,内容:"+content);
    }
}

 

它实现这个接口:

package com.yenange.biz;

public interface ITeacher {
    public void giveLessson(String teacher,String content);
}

拦截后要做的事:通知

package com.yenange.biz;
import java.lang.reflect.Method;
import java.util.Date;

import org.springframework.aop.MethodBeforeAdvice;

public class DianMingAdvice implements MethodBeforeAdvice {
    /**
     * method:被拦截的方法
     * arg1:被拦截方法的参数
     * target:被拦截的对象---当前就是Teacher这个类
     */
    public void before(Method method, Object[] arg1, Object target)
            throws Throwable {
        System.out.println("时间"+new Date());
        System.out.println("调用了"+method.getName());
        System.out.println("参数为:");
        for (int i = 0; i < arg1.length; i++) {
            Object obj=arg1[i];
            System.out.println("参数:"+(i+1)+"为:"+obj);
        }
        System.out.println("上课之前要先点名!");
    }
}

 

e. 怎么样配置aop.xml?

<bean id="teacher" class="com.yenange.biz.Teacher"></bean>
<bean id="xiaoye" class="com.yenange.biz.DianMingAdvice"></bean>
<bean id="teacher2" class="org.springframework.aop.framework.ProxyFactoryBean">
    <property name="proxyInterfaces">
        <value>com.yenange.biz.ITeacher</value>
    </property>
    <!-- 拦截 -->
    <property name="interceptorNames">
        <list>
            <value>xiaoye</value>
        </list>
    </property>
    <property name="target" ref="teacher"></property>
</bean>

规律:

  1. 要拦截方法所在的类,配成普通的Bean;
  2. 通知所在的类,也配成普通的Bean;
  3. teacher是无法直接拦截的,要通过一个接口,下面是通过spring的一个代理工厂,把teacher的接口和拦截的通知及拦截的对象联系起来。
  4. 1、第一个property,代理的接口;
  5. 2、第二个property,拦截器的名称,注意,它是一个list,因为可能有多个通知;
  6. 3、第三个Property,拦截的目标类,注意:应该是ref而不是value。

f.测试:

ApplicationContext context=new ClassPathXmlApplicationContext("aop.xml");
ITeacher t=(ITeacher)context.getBean("teacher2");
t.giveLessson("老何", "java");

注意:要用接口去接收!

不是太难,只是难记。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值