spring源码解析(Spring组件和IOC容器使用)---学习Day5

记录spring源码学习(Spring组件和IOC容器使用)第五天

查看下方地址学习,本页面只是自己学习代码的整理.

查看视频地址   https://www.bilibili.com/video/av59378064/?p=5  侵删

@Autowired三种注入方式

@Autowired //1
private Moon moon;

public Sun(@Autowired Moon moon) { //2
    System.out.println("sun----------");
    this.moon = moon;
}
@Autowired//3
public void setMoon(Moon moon) {
    this.moon = moon;
}

Spring组件使用

@Component
public class Light implements ApplicationContextAware , BeanNameAware, EmbeddedValueResolverAware {

    private ApplicationContext applicationContext;

    public void setBeanName(String s) {
        System.out.println("当前的BeanName 为:"+s);
    }

    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        System.out.println("传入的IOC容器:"+applicationContext);
        this.applicationContext = applicationContext;
    }

    //解析器
    public void setEmbeddedValueResolver(StringValueResolver stringValueResolver) {
        String result  = stringValueResolver.resolveStringValue("你好${os.name},计算#{3*8}");
        System.out.println(result);
    }
}


IOC容器使用5种

  • 前置通知 在方法之前执行执行(@Before)
  • 后置通知 在方法之后执行,不论有无异常(@After)
  • 返回通知 在目标方法正常返回值后运行(@AfterReturning)
  • 异常通知 在目标方法出现异常时执行(@AfterThrowing)
  • 环绕通知 ,动态代理,执行joinPoint.procced()(@Around)
--------------------------业务类---------------------------
@Component
public class Light implements ApplicationContextAware , BeanNameAware, EmbeddedValueResolverAware {

    private ApplicationContext applicationContext;

    public void setBeanName(String s) {
        System.out.println("当前的BeanName 为:"+s);
    }

    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        System.out.println("传入的IOC容器:"+applicationContext);
        this.applicationContext = applicationContext;
    }

    //解析器
    public void setEmbeddedValueResolver(StringValueResolver stringValueResolver) {
        String result  = stringValueResolver.resolveStringValue("你好${os.name},计算#{3*8}");
        System.out.println(result);
    }
}
--------------------------切面类---------------------------
@Aspect
public class LogAspects {
    @Pointcut("execution(public int com.cap11.aop.Calculator.*(..))")
    public void pointCut(){

    }
    @Before("pointCut()")
    public void logStart(JoinPoint joinPoint){
        System.out.println(joinPoint.getSignature().getName()+"方法前置通知执行,参数列表为"+ Arrays.asList(joinPoint.getArgs()));
    }
    @After("pointCut()")
    public void logEnd(){
        System.out.println("后置通知执行");
    }
    @AfterReturning(value = "pointCut()",returning = "result")
    public void logReturn(Object result){
        System.out.println("正常返回运行结果:"+result);
    }
    @AfterThrowing(value = "pointCut()",throwing = "exception")
    public void logException(Exception exception){
        System.out.println("方法异常:"+exception);
    }
    @Around("pointCut()")
    public Object Around(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {
        System.out.println("Arount执行之前");
        Object proceed = proceedingJoinPoint.proceed();
        System.out.println("Arount执行之后");
        return proceed;
    }
}
--------------------------Config类---------------------------
@Configuration
@EnableAspectJAutoProxy
public class Cap11MainConfig {
    @Bean
    public Calculator calculator(){
        return new Calculator();
    }
    @Bean
    public LogAspects logAspects(){
        return new LogAspects();
    }
}
--------------------------test类---------------------------
/*
切面类

前置通知 logStart在方法之前执行执行(@Before)
后置通知 logEnd 在方法之后执行,不论有无异常(@After)
返回通知 logReturn 在目标方法正常返回值后运行(@AfterReturning)
异常通知logException 在目标方法出现异常时执行(@AfterThrowing)
环绕通知 ,动态代理,执行joinPoint.procced()(@Around)
 */
public class Cap11Test {
    @Test
    public void test(){

        AnnotationConfigApplicationContext app = new AnnotationConfigApplicationContext(Cap11MainConfig.class);
        Calculator bean = app.getBean(Calculator.class);
        bean.div(6,3);
        bean.div(6,0);
    }

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值