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

交通局网站建设整改淮北建设网

交通局网站建设整改,淮北建设网,上海域名网站,建网站英语怎么说前言 我们在项目开发中都用到Spring,知道对象是交由Spring去管理。那么将一个对象加入到Spring容器中,有几种方法呢,我们来总结一下。 ComponentScan Component ComponentScan可以放在启动类上,指定要扫描的包路径;…

前言

  我们在项目开发中都用到Spring,知道对象是交由Spring去管理。那么将一个对象加入到Spring容器中,有几种方法呢,我们来总结一下。

@ComponentScan + @Component

  @ComponentScan可以放在启动类上,指定要扫描的包路径;该包路径下被@Component修饰的类,都会被注入到Spring容器中。

import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.ComponentScan;@ComponentScan(basePackages = "com.gs.beanRegister")
public class BootStrap {public static void main(String[] args) {AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(BootStrap.class);A bean = context.getBean(A.class);bean.say();}}

  com.gs.beanRegister包下:

import org.springframework.stereotype.Component;@Component
public class A {public void say() {System.out.println("这是a");}}

  注:在SpringBoot中,由于其自动装配的特性,所以@ComponentScan可以不加,只要@Component修饰的类和启动类在同一包下或者在启动类所在包的子包下。


@Configuration + @Bean

  @Configuration用来声明一个配置类,如果它的方法被@Bean修饰,那么该方法返回的对象也会被注入到Spring容器中。
  代码方面,BootStrap 类不动,A类的@Component去掉,com.gs.beanRegister包下建个配置类:

import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Bean;@Configuration
public class MyConfiguration {@Beanpublic A a() {return new A();}}

通过@Import注解

  这个注解可能平时大家接触得不多,它有好几种使用方式。

      1.直接导入类的class

import org.springframework.context.annotation.Import;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;@Import(A.class)
public class BootStrap {public static void main(String[] args) {AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(BootStrap.class);A bean = context.getBean(A.class);//B bean = context.getBean(B.class);bean.say();}}

  A类不用添加任何注解:

public class A {public void say() {System.out.println("这是a");}}

      2.导入配置类

import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.Import;@Import(MyConfiguration.class)
public class BootStrap {public static void main(String[] args) {AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(BootStrap.class);A bean = context.getBean(A.class);bean.say();}}
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;// 使用@Import导入配置类时,@Configuration可以不加
//@Configuration
public class MyConfiguration {@Beanpublic A a() {return new A();}}

      3.导入ImportSelector的实现类

import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.Import;@Import(MyImportSelector.class)
public class BootStrap {public static void main(String[] args) {AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(BootStrap.class);A bean = context.getBean(A.class);bean.say();}}
import org.springframework.context.annotation.ImportSelector;
import org.springframework.core.type.AnnotationMetadata;public class MyImportSelector implements ImportSelector {@Overridepublic String[] selectImports(AnnotationMetadata metadata) {// 返回要注入的bean的全路径,A类不用任何注解修饰// SpringBoot的自动装配,就用到了这种方式return new String[] { A.class.getName() };}}

      4.导入ImportBeanDefinitionRegistrar的实现类

import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.Import;@Import(MyImportBeanDefinitionRegistrar.class)
public class BootStrap {public static void main(String[] args) {AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(BootStrap.class);A bean = context.getBean(A.class);bean.say();}}
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
import org.springframework.beans.factory.support.RootBeanDefinition;
import org.springframework.context.annotation.ImportBeanDefinitionRegistrar;
import org.springframework.core.type.AnnotationMetadata;public class MyImportBeanDefinitionRegistrar implements ImportBeanDefinitionRegistrar {@Overridepublic void registerBeanDefinitions(AnnotationMetadata metadata, BeanDefinitionRegistry registry) {// 构建bean的元数据,A类不用任何注解修饰// spring-mybatis扫描mapper接口,生成代理类,就是用的这种方式BeanDefinition definition = new RootBeanDefinition(A.class);registry.registerBeanDefinition("a", definition);}}

借助FactoryBean接口

  实现FactoryBean接口的类,除了本身会被注入外,getObject方法返回的对象也会被注入到Spring容器中。

import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.Import;@Import(MyFactoryBean.class)
public class BootStrap {public static void main(String[] args) {AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(BootStrap.class);A bean = context.getBean(A.class);bean.say();}}
import org.springframework.beans.factory.FactoryBean;public class MyFactoryBean implements FactoryBean {@Overridepublic Object getObject() throws Exception {return new A();}@Overridepublic Class<?> getObjectType() {return A.class;}}

借助BeanDefinitionRegistryPostProcessor接口

  在Spring容器启动时,会调用该接口的postProcessBeanDefinitionRegistry方法,大概意思是等BeanDefinition(上面提到的bean的元数据)加载完成后,再对它进行后置处理。所以可以在此调整BeanDefinition,从而把对应的bean注入。

import org.springframework.beans.factory.support.BeanDefinitionRegistryPostProcessor;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;public class BootStrap {public static void main(String[] args) {AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext();BeanDefinitionRegistryPostProcessor postProcessor = new MyBeanDefinitionRegistryPostProcessor();context.addBeanFactoryPostProcessor(postProcessor);context.refresh();A a = context.getBean(A.class);a.say();}}
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
import org.springframework.beans.factory.support.BeanDefinitionRegistryPostProcessor;
import org.springframework.beans.factory.support.RootBeanDefinition;public class MyBeanDefinitionRegistryPostProcessor implements BeanDefinitionRegistryPostProcessor {@Overridepublic void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) throws BeansException {BeanDefinition definition = new RootBeanDefinition(A.class);registry.registerBeanDefinition("a", definition);}@Overridepublic void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {}
}
http://www.yayakq.cn/news/605069/

相关文章:

  • 做充气气模产品一般去哪些网站提升学历最快的方法
  • 建设网站的知识北京网站制作 建设推广
  • 网站该怎么做链接php 禁止电脑访问网站
  • 网站源码 和网站模板区别做网站有维护费是什么费用
  • 数据库查询网站建设论坛类网站备案
  • 找外包公司做网站计算机应用技术ui设计是什么
  • 任县建设局网站盐城建设厅网站设计备案
  • 大型网站开发用的技术软件开发主要工作内容
  • 做视频网站流量费高吗如何禁止ip访问网站
  • 做网站的感想与收获免费做宣传的网站是
  • 网页设计与网站开发经济可行性破解wordpress邀请码
  • 金融行业网站制作罗湖住房和建设局网站
  • 百度开放平台登录厦门seo优化推广
  • 兰州优化网站公司连云港做网站多少钱
  • 做财务需要关注哪些网站更换网站需要怎么做
  • 深圳公司网站备案珠海 网站设计
  • 火的网站建设明细报价表湖北网站推广宣传
  • 爱做网站免费模板viphtml5高端网站建设织梦模板
  • net网站开发是什么中交路桥建设有限公司电话
  • 网站运行速度优化网站运营论文
  • 远涛网站建设国家标准物质网站建设
  • 控制台网站网站建设注意事情
  • 瑞安学校网站建设手机视频制作
  • 东莞市研发网站建设企业高端建站神器
  • 网站开发的小结旅游网站系统
  • 塔城建设局网站深圳广告公司名录
  • 大型网站制作流程企业邮箱查询网站
  • 南通通明建设监理有限公司网站可以在线做c语言的网站
  • 银川网站建设效果高淳哪家做网站不错
  • 做静态网站成本免费标志在线设计