@Configuration与@Qualifier注解的使用

@Configuration注解的使用

示例:

public class Student {
    private String hight;
    public void eat(){
        System.out.println("eat...");
    }
    public void setHight(String hight){
        this.hight=hight;
    }
    public String all(){
        System.out.println(hight);
        return "abc";
    }
}
@Configuration
public class Config {
    @Bean(name = "aaa")
    public Student student(){
        Student student1 = new Student();
        student1.setHight("170");
        return student1;
    }
    @Bean(name = "bbb")
    public Student student1(){
        Student student1 = new Student();
        student1.setHight("175");
        return student1;
    }
}
@Autowired
private Student aaa;
@RequestMapping("student")
@ResponseBody
public String stuent(){
    String all = aaa.all();
    return all;
}

@Resource(name = "bbb")
private Student student;
@RequestMapping("student1")
@ResponseBody
public String student1(){
    String s = student.all();
    return s;
}

@Qualifier注解的使用

public class Person {
    public void eat(String food){
        System.out.println("我是吃货");
    }
}
@Qualifier("Asian")
@Component
public class AsianMan extends Person{
    @Override
    public void eat(String food) {
        System.out.println("Asian");
        System.out.println("黄种人");
        System.out.println(food);
    }
}
@Qualifier("Europe")
@Component
public class EuropeMan extends Person {
    @Override
    public void eat(String food) {
        System.out.println("Europe");
        System.out.println(food);
    }
}
@Autowired
@Qualifier("Asian")
private Person person;
@RequestMapping("Asian")
@ResponseBody
public String Asian(){
    person.eat("大米");
    return null;
}

访问:http://localhost:8080/Asian
在这里插入图片描述

Spring AOP简单介绍

AOP面向界面编程,提供了一种思路来解决应用系统中的一些公共服务。如:

  • 业务方法中的一些权限管理。
  • 每个方法调用的审计。
  • 数据库事务的管理。
  • 缓存。

没有AOP之前,需要在每个方法中实现。有了AOP,可以在运行时刻动态的“织入”一些公共代码。

常见AOP术语:

  • Aspect:类似于Java中的类声明,在Aspect中会包含一些Pointcut及相应的Advice。

  • Joint point:程序中定义的点,典型的如方法调用,参数访问,异常处理程序块的执行。Spring中只支持方法调用。

  • Pointcut:表示一组Joint point,如方法名、参数类型、返回类型等,这些Joint point通过逻辑关系组合起来,它定义了Advice将要发生的地方。

  • Advice:Advice定了在Pointcut里面具体要执行的操作,通过before、around、after(return、throw、finally)来区别是在每个Joint point 之前、之后、或是之前之后执行。

    • before:在执行方法前调用Advic,如缓存。
    • around:在执行方法前后调用Advice,最常用的一种。
    • after:在执行方法后调用Advice,after return 是方法正常返回后调用,after throw是方法抛出异常后调用。
    • finally:方法调用后执行Advice,无论是否异常都执行。
  • AOP proxy:AOP proxy也是Java对象,由AOP框架来创建,完成以上动作,AOP对象通常可以通过JDK dynamic proxy完成,或CGLib完成。

  • Weaving:实现上述切面编程的代码织入,可以在编译时刻(通过AspectJ compiler),也可以在运行时刻,Spring和其他大多数框架都是在运行时刻。

实例:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-aop</artifactId>
</dependency>
@Configuration
@Aspect  //声明是一个切面
public class AOPConfig {
    @Around("@within(org.springframework.stereotype.Controller)")
    //要织入的代码
    public Object simpleAop(final ProceedingJoinPoint pjp) throws Throwable {
    
    	//将调用方法的参数取出来
        Object[] args = pjp.getArgs();
        System.out.println("args:"+ Arrays.asList(args));
        System.out.println("aop");
        
        //调用原有方法,必须调用,不然原有方法不执行
        Object o = pjp.proceed();
        System.out.println(o);
        return o;
    }
}
@Autowired
private Student aaa;
@RequestMapping("student")
@ResponseBody
public String stuent(String name){
    String all = aaa.all();
    return "a";
}

访问:http://localhost:8080/student?name=cc控制塔打印如下:
在这里插入图片描述

maven中scope的理解:

scope:scope代表此类库与项目的关系,默认是compile,也就是编译和打包都需要此类库。test表示仅仅在单元测试的时候需要;provided表示在编译阶段需要此类库,但打包阶段不需要,这是因为项目的目标环境已经提供了;runtime表示在编译和打包的时候都不需要,但在运行的时候需要,比如某个指定的数据库驱动,编译和打包都不需要,但测试应用的要连接数据库的时候就需要此数据库驱动。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值