您现在的位置是:主页 > news > 北京做网站推广/产品软文范例软文

北京做网站推广/产品软文范例软文

admin2025/5/7 10:57:27news

简介北京做网站推广,产品软文范例软文,一个旅游网站建设,教育投资网站建设方案1、Spring生命周期总览 class(userService)–>推断构造方法–>实例化–>对象–>属性填充–>初始化–>AOP–>代理对象–>Bean(经过代理生成的bean是代理对象,不经过AOP生成的是userService对象) 1、首先创建spring容器…

北京做网站推广,产品软文范例软文,一个旅游网站建设,教育投资网站建设方案1、Spring生命周期总览 class(userService)–>推断构造方法–>实例化–>对象–>属性填充–>初始化–>AOP–>代理对象–>Bean(经过代理生成的bean是代理对象,不经过AOP生成的是userService对象) 1、首先创建spring容器…

1、Spring生命周期总览

  class(userService)–>推断构造方法–>实例化–>对象–>属性填充–>初始化–>AOP–>代理对象–>Bean(经过代理生成的bean是代理对象,不经过AOP生成的是userService对象)
1、首先创建spring容器;
2、spring容器通过class文件,判断构造方法,再利用反射机制生成对象;
3、通过注解或者配置文件,进行属性注入;
4、实现InitializingBean类中的afterPropertiesSet方法,或者任写一个方法加上@PostConstruct注解,进行下自定义的初始化
5、判断有没有AOP切点进行切入;
6、有AOP切点的话通过代理模式,生成一个继承原本类的新类(代理对象),重新实现下切点方法

2、AOP

@Aspect
@Component
public class TuLingAspect{@Before("execution(public void com.zhouyu.service.UserService.test())")public void tuLingBefore() {System.out.pring("tuLingBefore");}
}

  通过CGlib生成代理类(UserServiceProxy对象),注意需要再启动类中加入@EnableAspectAutoProxy注解,才可以启动AOP功能

class UserServiceProxy extend UserService {private UserService target;//自动注入对象public void test(){//通过反射等,先执行切点方法TuLingAspect.tuLingBefore();//执行父类原有的方法: super.test(); 或者使用注入调用父类方法target.test();}
}

3、深入理解构造方法

  通过代理产生的代理对象bean,原父类注入的其它类(比如注入orderService类),在代理对象中是没注入,为空!
1、一个无参构造函数、一个有参构造函数,spring在实例化对象的时候,使用的是无参的构造函数;
2、两个有参构造函数,spring实例化的时候不知道用哪个,所以直接报错(可以通过配置,在构造方法上使用@Autowired声明一下,告诉spring使用哪个构造函数);
3、只有一个构造函数,不管有没有参数,实例化的时候用唯一的这个构造函数;
4、有无参的肯定用无参的构造函数,不管有没有其它构造函数。

  当类中只有一个有参的构造函数的时候,Spring在使用此构造函数实例化对象的时候,参数传递的时候传的是什么,代码如下:

public class UserService {public UserService(OrderService orderService){ // byType , byName}
}

当实例化此对象的时候,Spring容器会首先根据类型去容器中寻找对象:
1、如果只有唯一的一个对象,直接注入;
2、如果有多个相同类型的对象,再根据名字寻找,找类型和名字都相同的注入。(Spring单例bean,可以创建多个类型相同而名称不同的单例bean)

4、Spring单例bean和单例模式

  Spring单例bean,可以创建多个类型相同而名称不同的单例bean,可以通过注册多个邢台类型但是名字不同的对象;
  单例模式,全局只能有一个此类型的对象;
  单例bean的实现方式,底层是通过map实现的(也就是俗称的单例缓冲池),然后在map中通过名字在map中找对应的对象:
1、如果没找到直接报错;
2、如果map中只有一个直接注入,名字都不用去匹配;
3、如果map中有多个,匹配名字寻找对应的对象,找不到报错。

5、@Autowired工作原理详解

  AutoWire是先通过bytype,再通过byname查找Bean并注入的,当然还有其他过程筛选;
1、AutowireCandidate = false,通过在@Bean注解上加上这个属性,可以在Bytype步骤后开启一层筛选,排除掉AutowireCandidate = false的bean对象;
2、在AutowireCandidate筛选后,还可以经过一次@Qualifier筛选,在Bean加上注解并起一个组名,在注入的地方加入@Qualifier,并标识组名,进行属性注入;
3、在@Qualifier之后,会使用@Primary进行一次筛选,直接筛选出一个(注解标注Bean上,Primary只能出现一次,出现多次会报错),直接筛选出一个bean并进行注入
4、如果上边都没筛选出想要的bean,那么spring会取优先级最高的bean进行注入,需要自己用@priority注解,标注一下优先级;
5、如果在上边的步骤没有3、4,筛选出来的还是多个bean,那么才会最后通过byname进行筛选并注入。
在这里插入图片描述
在这里插入图片描述

6、 @resource底层原理(java层次的注解)

1、resource注解后,有那么属性的时候,直接根据name找,找到的话直接注入,找不到直接报错;
2、resource注解没有name时候,先根据属性名字判断一下,如果有,直接注入;如果没有,在根据类型寻找,如果寻找到多个会报错,如果只有一个直接注入。
在这里插入图片描述

7、spring事物

  Spring开启事务后,会生成代理对象,代理对象重写被代理对象的方法,并关闭自动提交sql功能,当被代理对象方法执行完毕,没有错误后,再commit(),提交给数据库;
在这里插入图片描述
2、事物七种配置:

(1)REQUIRED:支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。

(2) SUPPORTS:支持当前事务,如果当前没有事务,就以非事务方式执行。

(3) MANDATORY:支持当前事务,如果当前没有事务,就抛出异常。

(4) REQUIRES_NEW:新建事务,如果当前存在事务,把当前事务挂起。

(5)NOT_SUPPORTED:以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。

(6) NEVER:以非事务方式执行,如果当前存在事务,则抛出异常。

(7) NESTED:支持当前事务,如果当前事务存在,则执行一个嵌套事务,如果当前没有事务,就新建一个事务