Spring底层核心原理解析

本文深入探讨了Spring框架的bean创建过程,包括从无参构造方法生成对象到依赖注入,再到初始化前后的详细步骤。分析了bean与普通Java对象的区别,解释了依赖注入的原理。此外,还讨论了Spring的AOP机制,如何确定对象是否需要AOP以及事务管理的相关问题,揭示了事务失效的原因及解决方案。
摘要由CSDN通过智能技术生成
class userServiceProxy extends UserService(){  //生成代理类去继承UserService
    UserService target;
        public void test(){ //就可以重写test方法
            //先执行@Before
            //再执行被代理的逻辑
            target.test();//所以代理类先调用子类test,接着调用切面逻辑,再而调用普通对象UserService的test方法(此时orderService是有值的)
        }
    }class userServiceProxy extends UserService(){  //生成代理类去继承UserService
    UserService target;
        public void test(){ //就可以重写test方法
            //先执行@Before
            //再执行被代理的逻辑
            target.test();//所以代理类先调用子类test,接着调用切面逻辑,再而调用普通对象UserService的test方法(此时orderService是有值的)
        }
    }class userServiceProxy extends UserService(){  //生成代理类去继承UserService
    UserService target;
        public void test(){ //就可以重写test方法
            //先执行@Before
            //再执行被代理的逻辑
            target.test();//所以代理类先调用子类test,接着调用切面逻辑,再而调用普通对象UserService的test方法(此时orderService是有值的)
        }
    }class userServiceProxy extends UserService(){  //生成代理类去继承UserService
    UserService target;
        public void test(){ //就可以重写test方法
            //先执行@Before
            //再执行被代理的逻辑
            target.test();//所以代理类先调用子类test,接着调用切面逻辑,再而调用普通对象UserService的test方法(此时orderService是有值的)
        }
    }class userServiceProxy extends UserService(){  //生成代理类去继承UserService
    UserService target;
        public void test(){ //就可以重写test方法
            //先执行@Before
            //再执行被代理的逻辑
            target.test();//所以代理类先调用子类test,接着调用切面逻辑,再而调用普通对象UserService的test方法(此时orderService是有值的)
        }
    }class userServiceProxy extends UserService(){  //生成代理类去继承UserService
    UserService target;
        public void test(){ //就可以重写test方法
            //先执行@Before
            //再执行被代理的逻辑
            target.test();//所以代理类先调用子类test,接着调用切面逻辑,再而调用普通对象UserService的test方法(此时orderService是有值的)
        }
    }

spring原理分析

主要了解spring全家桶最基本的原理、内容

Spring Framework

  • AOP
  • 依赖注入

springboot是基于Spring Framework

@Component
public class OrderService{
    
}
@Component
public class UserService{
    @Autowired
    private OrderService orderService;
    public void test(){
        System.out.println("test");
    }
}
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
UserService userService = (UserService)context.getBean("userService");
userService.test();
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");
UserService userService = (UserService)context.getBean("userService");
userService.test();

以下两句都是学习spring时较为重要的两句话

第一句在springboot加载时被调用了 在spring3.0增加了该类 这个是以一个class的方式一个类的形式来充当一个配置文件 直接可以通过使用注解来定义扫描路径(同样也是创建一个spring容器)

第二句在使用springmvc时也调用了类似的PathXml了 作用是创建一个容器,传一个配置文件给spring容器(文件中可以定义一下扫描路径等操作) spring入门级时使用较多

然后可以通过上面的context来getBean获取bean对象,再执行方法

二者其实很相像,一个是以类class的形式,另一个是以xml配置的方式

spring中的bean与我们Java中普通对象有什么区别

这个我们可以测试

新增一个OrderService类这个类使用component注解标注为组件

并且在UserService中进行依赖注入(@Autowired)

这个时候我们观看语句一中context.getBean的userService中的orderService是否有值呢?

  • 肯定是有值的,因为OrderService是用@component注解标准,且在UserService中使用@Autowired依赖注入orderService
  • 此时我们再测试一下自己new UserService对象出来,看看其中OrderService是否有值---没有值

这就是spring中的bean与Java中普通对象的区别

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值