bean对象的创建


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. 代理类才是开启事务的类。 如果想要 类的事务传递下去。就