第一节课程
Spring对象加载
//通过注解进行获取全局上下文进行加载
AnnotationConfigApplicationContext context=new AnnotationConfigApplicationContext(CommonController.class);
//通过配置文件加载全局上下文配置文件
ClassPathXmlApplicationContext classPathXmlApplicationContext=new ClassPathXmlApplicationContext("spring.xml");
classPathXmlApplicationContext.getBean("userService");
Spring对象加载
1==》:在Spring加载对象的时候,一般默认会调用无参的构造方法,如果有多个构造方法,也有无参的,那么会默认调用无参的,如果有多个构造方法,木有无参的,那么会报错,因为Spring不知道用哪一个构造方法,其中构造方法中的参数Spring会自动去容器中去寻找,通过类型先去寻找,如果有多个,然后在通过bean的名字寻找,如果木有就报错,如果寻找多个,bean中的名字很重要,必须参数名字严格要求,如果寻找一个,可以随便明明参数bean的名字,找到一个会默认直接进行注入。
2==>: @PostConstruct注解是在Spring构造对象注入属性之前进行执行,可以对注入属性进行一些操作。 --》afterPropertiesSet()这个方法进行属性注入
3:通过 implements实现InitializingBean这个接口实现其中的方法,这个也是在注入属性的时候可以进行一些操作
4:初始化后:这个是AOP之后的操作
Spring中的代理对象
Spring事务
解释链接:https://www.jianshu.com/p/add7ff444401
@EnableTransactionManagement以及 @Transactional 注解
一般Springboot中会自动帮我们引入@EnableTransactionManagement这个以来,所以我们不需要关心这个注解,不用手动的再次引入,
TransactionManagement的作用 ===》事务手动提交
注意操作数据库的数据源和事务管理器中注入的数据源是否是同一个,后果事务不生效
Spring中事务可能不会生效,注意
只有代理对象才可以进行AOP事务的生效,Spring中的每一个对象几乎都是代理对象,一定注意,如果直接类中的方法,这样木有经过代理类,这样不会走AOP,这样的事务不会进行生效
解决方法
1:注入Spring中的代理类
2:植入当前自己,然后调用方法,也是可以的
3:这个使用我们一般直接在Controller中调用ServcieImpl中的方法,这样就不用那么麻烦了