Bean 创建的生命周期
1. 程序启动,首先读取 带有@Component,@Service ,@Controller 的类这些类都是spring 要创建的bean 对象。
2.默认根据无参构造方法实例化 这里该类就被创建成一个对象了,但还不是bean。
推断构造方法: 有无参就用。 如果有多个构造方法,就用无参构造实例化。 如果没有无参构造方法,就报错。 也可以通过 在指定构造方法上加@PostConstruct,强制执行。
推断构造方法的参数选择: 先根据类型去Spring中查找,查到是一个就赋值,查到多个 就根据 变量名字在查。 type+name
3. 依赖注入
根据 类上的 这些注解 @Autowired,@Resource,去spring 中取出来,进行赋值。
4. 初始化。
初始化前:如果需要可以进行赋值,比如数据库的查询赋值都是行的。
初始化:如果需要可以进行赋值,比如数据库的查询赋值都是行的。
初始化后(Aop): 生成代理对象。 所以说bean 的初始化,会产出两个对象,一个实际对象,一个又spring管理的代理类bean.
5. 才正在是一个归spring 管理的bean。
怎么样一个类要不要进行AOP?
1. . 程序启动,首先读取 带有 @Aspect,@Component 注解的类。 如果通过反射。获取类中的方法。 比如获取 该类定义的切点 ,和切入表达式。然后就看那些类。符合就给哪些类生成代理类啊。
class UserServiceProxy extends UserService{
// 这个对象不是代理对象。 是bean 初始化时,真实的对象。
private UserService userService;
public void test(){
// 1.y有没有 @Transactional
// 2.执行切面 想要干的事情 (比如开启事务)
//3. 执行业务逻辑 这里的 userService 不是代理对象。
userService.test();
}
}
注意:事务失效的情况。
1. 代理类才是开启事务的类。 如果想要 类的事务传递下去。就