当前位置: 首页 > wzjs >正文

建网站用什么工作站网站怎么快速排名

建网站用什么工作站,网站怎么快速排名,wordpress参考文献,asp网站 会员注册一、加载顺序 1、默认扫描顺序 Spring 在 ComponentScan 或者 SpringBootApplication 默认的包扫描路径下,会按照类路径扫描所有的 Component 及其派生注解(如 Service, Repository, Controller)的 Bean,并将其注册到 Spring 容…

一、加载顺序

1、默认扫描顺序

Spring 在 @ComponentScan 或者 @SpringBootApplication 默认的包扫描路径下,会按照类路径扫描所有的 @Component 及其派生注解(如 @Service, @Repository, @Controller)的 Bean,并将其注册到 Spring 容器中。

(1)默认情况下,扫描的顺序是不确定的,因为 Spring 使用反射扫描类路径,而类路径的顺序通常依赖于底层文件系统或者 ClassLoader 的实现。即使这个bean继承了ApplicationContextAware、InitializingBean、或者bean的某个接口使用了@PostConstruct注解,这些Bean的加载顺序是不确定的,见:

SpringBean模块(二)bean初始化(2)和容器初始化顺序的比较--引入ApplicationContextInitializer-CSDN博客

(2)但如果 @ComponentScan 通过 basePackages 指定了多个包路径,Spring 会按声明的顺序扫描这些包。其实也只是包有了顺序,实际上类还是按照类的路径加载,也就是无序的。

2、依赖关系对扫描顺序的影响

上面提到在没有依赖关系的情况下,bean的加载顺序是随机的。

而如果一个 @Component 需要依赖另一个 Bean,Spring 会确保 先初始化被依赖的 Bean,再初始化依赖它的 Bean。

(1)使用@Autowired等自动装配

见SpringBean模块(二)bean初始化(2)和容器初始化顺序的比较--引入ApplicationContextInitializer-CSDN博客

(2)构造函数的依赖
@Component
public class A {public A(B b) {System.out.println("A initialized");}
}@Component
public class B {public B() {System.out.println("B initialized");}
}输出:
B initialized
A initialized
3、显示顺序调整问题
(1)@DependsOn显示指明顺序
@Component
@DependsOn("c")
public class D {public D() {System.out.println("D initialized");}
}@Component
public class C {public C() {System.out.println("C initialized");}
}输出:
C initialized
D initialized
 (2)@Order影响 ListSet 类型的 Bean

如果多个 @Component 实现了同一个接口,并且注入为 ListSet 类型,Spring 会根据 @Order 注解的值来决定顺序:

@Component
@Order(2)
public class First implements MyInterface { }@Component
@Order(1)
public class Second implements MyInterface { }

当它们被注入 List<MyInterface> 时,顺序会是 SecondFirst

但**@Order 只影响 List/Set 注入的顺序,不影响 Bean 的初始化顺序**。

 (3)@Primary@Qualifier 影响注入选择

如果多个 @Component 适用于相同类型的注入:

  • @Primary 标注的 Bean 会优先被注入。

  • @Qualifier 可以精确指定要注入哪个 Bean,但不影响初始化顺序。

(4)懒加载 @Lazy 可能会延迟初始化

如果 @Component 标注了 @Lazy,它的 Bean 只有在被使用时才会初始化,而不是在 Spring 容器启动时初始化:如果该 Bean 没有被使用,它就不会初始化。

@Component
@Lazy
public class LazyBean {public LazyBean() {System.out.println("LazyBean initialized");}
}

二、加载原理对比

1、@configuration和@component

使用@component+@Bean与@configuration+@Bean,加载的区别很大

(1)@component+@Bean

不会被Spring代理,会直接获取一个全新的Bean对象实例所以全局会有多个Bean对象的实例;而

(2)@configuration注解的@Bean

   全局只有一个Bean对象。

Spring 容器在启动时,会加载默认的一些PostProcessor,其中就有ConfigurationClassPostProcessor,这个后置处理程序专门处理带有@Configuration注解的类,这个程序会在bean 定义加载完成后,在bean初始化前进行处理。主要处理的过程就是使用cglib动态代理增强类,而且是对其中带有@Bean注解的方法进行处理。

Spring发现方法所请求的Bean已经在容器中,那么就直接返回容器中的Bean。所以全局只有一个SimpleBean对象的实例。

(3)demo
package com.bit.demo.test.bean;import com.bit.demo.dto.UserDTO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;@Component
@Slf4j
public class CompBean {@Beanpublic UserDTO initUser() {log.info("CompBean获取user");UserDTO user = new UserDTO();user.setUserName("zs");return user;}
}
package com.bit.demo.test.bean;import com.bit.demo.dto.RoleDTO;
import com.bit.demo.dto.UserDTO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Component;@Configuration
@Slf4j
public class ConfigBean {@Beanpublic RoleDTO initRole() {log.info("ConfigBean 获取user");RoleDTO user = new RoleDTO();user.setRoleName("school");return user;}
}
单测
    @Autowiredprivate CompBean compBean;@Autowiredprivate ConfigBean configBean;@Testpublic void testBean(){compBean.initUser();configBean.initRole();}

执行输出

2025-03-28T16:43:08.200+08:00  INFO 21600 --- [           main] com.bit.demo.test.bean.CompBean          : CompBean获取user
2025-03-28T16:43:08.201+08:00  INFO 21600 --- [           main] com.bit.demo.test.bean.ConfigBean        : ConfigBean 获取user
2025-03-28T16:43:08.587+08:00  INFO 21600 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port 52533 (http) with context path '/bitDemo'
2025-03-28T16:43:08.594+08:00  INFO 21600 --- [           main] com.bit.demo.UserSysFlagTest             : Started UserSysFlagTest in 2.366 seconds (process running for 2.916)
Java HotSpot(TM) 64-Bit Server VM warning: Sharing is only supported for boot loader classes because bootstrap classpath has been appended
2025-03-28T16:43:09.447+08:00  INFO 21600 --- [           main] com.bit.demo.test.bean.CompBean          : CompBean获取user

可见,@Configuration+@Bean只执行一次。


文章转载自:

http://Iyyc5KbH.Lmjkn.cn
http://9kVFLpvh.Lmjkn.cn
http://dVjbQVX4.Lmjkn.cn
http://MTrSsBuc.Lmjkn.cn
http://EER3iB5n.Lmjkn.cn
http://Aub6QLNc.Lmjkn.cn
http://ptwF9fIL.Lmjkn.cn
http://44g8W6a3.Lmjkn.cn
http://PB7fHQne.Lmjkn.cn
http://4PE3UNQt.Lmjkn.cn
http://OtDVJrAn.Lmjkn.cn
http://tzgX16CB.Lmjkn.cn
http://rH8W2uTM.Lmjkn.cn
http://FTbXKKjS.Lmjkn.cn
http://tZYQPbD9.Lmjkn.cn
http://2IItB4vh.Lmjkn.cn
http://zyicvEyo.Lmjkn.cn
http://1ACVo2xy.Lmjkn.cn
http://mqkfLrzx.Lmjkn.cn
http://rr9HVWy7.Lmjkn.cn
http://lvMVicvK.Lmjkn.cn
http://VT1EMsvQ.Lmjkn.cn
http://lZ7RtJ0P.Lmjkn.cn
http://8FhDXx02.Lmjkn.cn
http://x6i9Qe9M.Lmjkn.cn
http://FscxXXry.Lmjkn.cn
http://jpTYEigd.Lmjkn.cn
http://APzP2c2Z.Lmjkn.cn
http://TiyGVhJh.Lmjkn.cn
http://87waGDsG.Lmjkn.cn
http://www.dtcms.com/wzjs/693195.html

相关文章:

  • 什么是网站维护南宁seo做法价格
  • 做网站的流程与步骤南昌vr网站开发
  • 博物馆设计网站推荐wordpress维护模式
  • 揭阳网站设计公司任何网络项目开始的第一步
  • 网站做ulr跳转百度高级搜索引擎入口
  • 创立网站做电商前端做网站直播
  • 做网站建设的网站天津建站服务
  • 学网站开发工作好找吗网站 如何做后台维护
  • 公司的网站建设价格低手机网站建设公司推荐
  • 关于网站建设领导分工北京高端网站建设有限公司
  • 网站开发可以用哪些语言简单做图网站
  • 制作购物网站需要多少钱成都网站快速排名软件
  • 网站毕业设计任务书外贸网站设计制作优化推广
  • 网站开发学习方法北京住房投资建设中心网站首
  • 网站系统设计目标wordpress插件 收费下载资源
  • html5 网站模板 米交通信用网站建设
  • 伴奏网站防盗是怎么做的销售网站开发
  • 通化网站建设公司做网站商业欺骗赔多少
  • 做微课的网站有哪些方面wordpress 5.2.2安装要求
  • 两学一做网站飘窗网站建设400电话
  • 中国建设银行青浦支行网站软件工程师级别
  • 哪些网站是做快消品的网站 关键字
  • 专业做网站登录asp.net 做网站
  • 微信小程序在哪里制作河南seo
  • 网站建设大全厦门 建网站
  • 衣服网站建设规划书it运维服务
  • html购物网站怎么做网络架构图用什么软件画
  • 兰州网站seo外包怎么样建立自己的网站
  • 网站建设方案及报价单哪里有整站优化
  • 区块链开发教程宁波seo推广公司排名