Spring是个大内容,包含了Spring FrameWork(Spring框架),Spring Boot,Spring Data,Spring Cloud等。
Spring Boot 就是基于Spring FrameWork做的。
如下代码:
public static void main(String[] args) {
// 与ClassPathXmlApplicationContext类似,springMVC创建的,针对的是xml
// AnnotationConfigApplicationContext针对的是class,springboot创建的
AnnotationConfigApplicationContext configApplicationContext = new AnnotationConfigApplicationContext(AppConfig.class);
UserService userService = (UserService) configApplicationContext.getBean("userService");
userService.test();
}
配置文件:
@ComponentScan("cn")
public class AppConfig {
}
AnnotationConfigApplicationContext 会创建容器,去扫描AppConfig.class配置的路径cn
路径下的类若存在@Component、@Service等注解,则会记录这些类,并创建Bean对象。
大体Bean创建步骤如下:
Spring 在创建对象找构造函数时,遵循规则:
Spring如何注入Bean
判断是否需要Aop
Aop大致流程:
class AProxy extends A {
A target;// 单例池中的对象,进行过依赖注入初始化的对象
public void test() {
// 执行@Before等
a.test();
// 执行@After等
}
}
当在某个方法上加上@Transactional注解后,就表示这个方法需要进行事务处理,会在初始化后进行AOP,生成代理对象来处理。
Spring是如何进行事务处理呢?
因此,Spring事务是否生效,要看@Transactional所修饰的方法是否是代理对象所调用,若是,则事务生效,若不是,则没有生效。