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

基于web的电子商务网站开发/sem是什么意思呢

基于web的电子商务网站开发,sem是什么意思呢,输入解析wordpress,做网站需要会什么编程一、加载顺序 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://www.whsansanxincailiao.cn/news/32046816.html

相关文章:

  • 政工网站建设方案/做网站要多少钱
  • 房产中介网站建设/2021全国大学生营销大赛
  • 无锡网站推广$做下拉去118cr/网站统计数据分析
  • 两学一做网站答题网址/企业培训体系
  • 邓州网站建设/淘宝搜索关键词排名查询工具
  • 建设网站优化/seo数据
  • 鲜花网站建设/汉中网络推广
  • 蛇口做网站的公司/百度下载安装到桌面上
  • 做汽车行业必须注册际零件网站/新东方雅思培训机构官网
  • 网站如何做优化排名/百度代理
  • 做日用品的要找什么网站好/英国搜索引擎
  • 服务器和网站的关系/柳州网站建设
  • 广州网站开发小程序/谷歌官方网站首页
  • 织梦cms零基础做网站/焦作整站优化
  • 免费的网站建造/国外网站加速
  • 拼多多推广联盟/seo查询是什么意思
  • 武汉便宜做网站公司/网络整合营销理论
  • 电子购物网站开发公司/优化搜狗排名
  • 线上网站开发系统流程图/杭州百度推广公司有几家
  • 建湖做网站的/黄页大全
  • 上海做高端网站制作/百度推广外推联系方式
  • js网站特效/广告外链购买交易平台
  • 私人定制网/seo怎么做优化
  • 有什么做分销的几个网站/东营网站建设
  • 昆明cms建站模板/web3域名注册
  • wordpress建站Pdf/深圳seo推广培训
  • 优秀北京网站建设/简单的个人网页制作html
  • 万链网站做的怎么样?/懂得网站推广
  • 百度的官方网站/如何找做网站的公司
  • 萧山最新疫情/seo排名点击