Spring4 In [email protected]切面

源码下载地址:http://download.csdn.net/download/poiuy1991719/9993015

bean接口:

package com.zte.sound.service.bean;
/**
 * 光盘
 */
public interface CompactDisc {
    public void play();
}

Bean接口实现类:

package com.zte.sound.service.bean.imp;

import org.springframework.stereotype.Component;

import com.zte.sound.service.bean.CompactDisc;

//@Component注解会告诉Spring创建这个类的实例bean(注意,启动Component注解功能需要在xml里面配置)
//@Component("newName")//这里,配置类已经创建了
public class SgtPeppers implements CompactDisc {

    private String title;
    private String artist;

    public SgtPeppers(String title,String artist){
        this.title=title;
        this.artist=artist;
        System.out.println("SgtPeppers类实例化");
    }

    public void play() {
        System.out.println("Sgt Playing:title="+title+" artist="+artist);
    }

}

切面类:

package com.zte.sound.service.bean;

import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.AfterThrowing;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;

@Aspect
public class Audience {

    //这样就可以在后面调用简化(例如:takeSet()方法)
    @Pointcut("execution(** com.zte.sound.service.bean.CompactDisc.play(..))")
    public void perfomanceRef(){}

    //表演前
    @Before("execution(** com.zte.sound.service.bean.CompactDisc.play(..))")
    public void silenceCellPhones(){
        System.out.println("silenceCellPhones:@Before:0:请把手机静音");
    }

    @Before("perfomanceRef()")
    public void takeSet(){
        System.out.println("takeSet:@Before:1:找一个位置坐下");
    }

    //表演后
    @AfterReturning("execution(** com.zte.sound.service.bean.CompactDisc.play(..))")
    public void applause(){
        System.out.println("applause:@AfterReturning:鼓掌");
    }

    @AfterThrowing("execution(** com.zte.sound.service.bean.CompactDisc.play(..))")
    public void demandRefund(){
        System.out.println("demandRefund:@AfterThrowing:唱错了重唱");
    }
}

配置类:

package configs;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.EnableAspectJAutoProxy;
import org.springframework.context.annotation.Import;

import com.zte.sound.service.bean.Audience;
import com.zte.sound.service.bean.CompactDisc;
import com.zte.sound.service.bean.imp.SgtPeppers;

@Configuration
@ComponentScan(basePackageClasses={SgtPeppers.class,Audience.class})
@EnableAspectJAutoProxy   //启动AspectJ自动代理
public class CDPlayerConfig {

    @Bean
    public CompactDisc returnSgtPeppers(){//播放SgtPeppers
        return new SgtPeppers("title","artist");
    }

    //申明切入点Audience对象
    @Bean
    public Audience audience(){
        return new Audience();
    }

}

测试类:

package test;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import com.zte.sound.service.bean.CompactDisc;
import org.springframework.aop.aspectj.annotation.AnnotationAwareAspectJAutoProxyCreator;
import configs.CDPlayerConfig;

@RunWith(SpringJUnit4ClassRunner.class)//Spring的Junit测试,会在测试开始时,创建Spring的应用上下文
@ContextConfiguration(classes=CDPlayerConfig.class)//表明配置类
public class SpringTest1 {

    //自动装配
    @Autowired
    private CompactDisc sp;

    @Test
    public void instanceSpring(){
        //自动装配
        sp.play();
    }
}
时间: 2024-11-08 02:31:50

Spring4 In [email protected]切面的相关文章

Spring4 In [email protected]单例、多例Bean

Spring In [email protected]单例.多例Bean 代码下载地址:http://download.csdn.net/download/poiuy1991719/9967494 Singleton:单例    @Scope(ConfigurableBeanFactory.SCOPE_SINGLETON)@Scope("singleton") Prototype:每次注入都会创建新的   @Scope(ConfigurableBeanFactory.SCOPE_PRO

Spring4 In [email protected]往切面传递参数

//args(trackNumber):表明传给playTrack的int参数,也会传给切入点 @Pointcut("execution(* com.zte.sound.service.bean.CompactDisc.playTrack(int))"+" && args(trackNumber)") public void trackPlayed(int trackNumber){} @After("trackPlayed(trackNu

Spring4 In [email protected]运行时注入值

代码链接: 接口: package com.zte.sound.service.bean; /** * 光盘 */ public interface CompactDisc { public void play(); } 实现类: package com.zte.sound.service.bean.imp; import org.springframework.stereotype.Component; import com.zte.sound.service.bean.CompactDisc

关于spring3中初始化问题[email protected]

如果使用的是spring3.X 当在xxxServiceImpl中加上@Service注解,并在空构造器中 System.out.println(this); 那么这句会执行两次 [email protected] [email protected] 如果是spring4.x,则没有此问题

Spring高级话题[email protected]***注解的工作原理

出自:http://blog.csdn.net/qq_26525215 @EnableAspectJAutoProxy @EnableAspectJAutoProxy注解 激活Aspect自动代理 <aop:aspectj-autoproxy/> 开启对AspectJ自动代理的支持. 在用到AOP的自动代理的时候用,如果你理解了Java的动态代理,很容易的就会熟悉AOP的自动代理的. @EnableAsync @EnableAsync注解开启异步方法的支持. 这个相信大家都比较熟悉的.对于异步

[技术分享][email&#160;protected] @After @AfterReturning @Around @AfterThrowing spring aop 的advise(通知)

今天在项目中成功实现了spring aop . @Before @After @AfterReturning @Around @AfterThrowing 这五个是实现spring aop常用的五个注解 相关的注解还有@Aspect @Component @PointCut 我在实践中发现: [email protected] @After @AfterReturning @Around 这四个通知只有用一种,如果使用两种及以上会发生一些问题. [email protected]@PointCu

[email&#160;protected] 注解原理与使用

Java反射 java反射机制的定义: 在运行转态时(动态的)时. 对于任意一个类,都能够知道这个类的所有属性和方法 对于任意一个对象,都能够知道调用它的任意属性和方法 Class对象 java中用对象来对现实生活中的事物进行抽象,如人(现实生活)抽象到一个person类(java对象).但有没有想过,java中的类(现实生活)其实也是一个Class对象(对象).因此,这个Class类就包含了所有你定义的Class信息,包括所有的方法(私有,公有).构造器.实现了那些方法.哪些注解信息.所有的属

$*和[email&#160;protected]之间区别代码分析

#!/bin/bash set 'apple pie' pears peaches for i in $*           /*单引号被去掉,循环单个字符输出*/ do echo $i done [[email protected] Ex_14.02-14.31]# sh 14-14-1 apple pie pears peaches -------------------------------------------------------------- #!/bin/bash set

[email&#160;protected]一个高效的配置管理工具--Ansible configure management--翻译(六)

无书面许可请勿转载 高级playbook Finding files with variables All modules can take variables as part of their arguments by dereferencing them with {{ and }} . You can use this to load a particular file based on a variable. For example, you might want to select a