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

wordpress刷关键武汉seo优化顾问

wordpress刷关键,武汉seo优化顾问,爱站网 关键词挖掘工具站,网站域名所有权查询SpringBoot基础系列文章 SpringBoot基础(一):快速入门 SpringBoot基础(二):配置文件详解 SpringBoot基础(三):Logback日志 SpringBoot基础(四):bean的多种加载方式 目录 一、xml配置文件二、注解定义bean1、使用AnnotationCon…

SpringBoot基础系列文章

SpringBoot基础(一):快速入门

SpringBoot基础(二):配置文件详解

SpringBoot基础(三):Logback日志

SpringBoot基础(四):bean的多种加载方式


目录

  • 一、xml配置文件
  • 二、注解定义bean
    • 1、使用AnnotationConfigApplicationContext对象加载
    • 2、加载本地类
    • 3、加载第三方jar类
  • 三、特殊方式
    • 1、使用FactroyBean接口
    • 3.2、注解导入XML格式配置的bean
    • 3.3、通过上下文ApplicationContext注册bean
  • 四、@Import注解注入bean
    • 1、@Import导入普通类
    • 2、@Import导入实现了ImportSelector接口的类
    • 3、@Import导入实现了ImportBeanDefinitionRegistrar接口的类
    • 4、@Import导入实现了BeanDefinitionRegistryPostProcessor接口的类

一、xml配置文件

配置文件spring-bean.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd"><!--xml方式声明自己开发的bean--><bean id="person" class="com.xc.entity.Person"/><bean class="com.xc.entity.Person"/><bean class="com.xc.entity.Person"/><!--xml方式声明第三方开发的bean--><bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"/>
</beans>

加载xml

public class App {public static void main(String[] args) {ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("spring-bean.xml");for (String beanDefinitionName : context.getBeanDefinitionNames()) {System.out.println(beanDefinitionName);}}
}

输出结果:

person
com.xc.entity.Person#0
com.xc.entity.Person#1
dataSource

二、注解定义bean

1、使用AnnotationConfigApplicationContext对象加载

public class App {public static void main(String[] args) {AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(MyConfig.class);for (String beanDefinitionName : context.getBeanDefinitionNames()) {System.err.println(beanDefinitionName);}}
}
public class MyConfig {
}

  使用AnnotationConfigApplicationContext对象加载MyConfig,即使MyConfig类什么注解没有,也会被注册为bean。

2、加载本地类

  • 使用的注解@Component或其他衍生注解@Service@Controller@Repository
@Service
public class BookServiceImpl implements BookService {
}

3、加载第三方jar类

  由于我们无法在第三方提供的技术源代码中去添加上述4个注解,因此当你需要加载第三方开发的bean的时候可以使用@Component@Configuration都可以,一般引入第三方倾向于后者。

//@Component
@Configuration
public class DbConfig {@Beanpublic DruidDataSource dataSource(){return new DruidDataSource();}@Beanpublic Cat cat(){Cat cat = new Cat();cat.setDruidDataSource(dataSource());return cat; }
}
  • @Configuration(proxyBeanMethods = true):默认设置,使用了cglib动态代理,cat里的dataSource和@Bean创建的dataSource是同一个对象,可以理解为单例
  • @Configuration(proxyBeanMethods = false):此时和@Component注解功能一样,cat里的dataSource和@Bean创建的dataSource不是同一个对象,可以理解为多例
  • 如果配置中@Bean标识的方法之间不存在依赖调用的话,可以设置为false,可以避免拦截方法进行代理操作,提升性能

三、特殊方式

1、使用FactroyBean接口

  • spring提供了一个接口FactoryBean,也可以用于声明bean
  • 实现了FactoryBean接口的类造出来的对象不是当前类的对象,而是FactoryBean接口泛型指定类型的对象
  • 一般用来创建复杂对象
public class DogFactoryBean implements FactoryBean<Dog> {//创建bean的复杂过程@Overridepublic Dog getObject() throws Exception {Dog d = new Dog();//.........return d;}//bean的类型@Overridepublic Class<?> getObjectType() {return Dog.class;}//bean是否单例@Overridepublic boolean isSingleton() {return true;}
}

配置类

public class MyConfig {@Beanpublic DogFactoryBean dog(){return new DogFactoryBean();}
}

启动类

public class App {public static void main(String[] args) {AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(MyConfig.class);System.out.println(context.getBean("dog"));}
}

3.2、注解导入XML格式配置的bean

  • 场景:旧项目xml配置bean融入配置类项目中
  • @ImportResource在配置类上直接写上要被融合的xml配置文件名即可
@Configuration
@ImportResource(locations = "spring-bean.xml")
public class SpringConfig {
}

3.3、通过上下文ApplicationContext注册bean

  • 在容器初始化完成后手动加载bean,创建方式很多

在这里插入图片描述

方式一:无参构造

public class App {public static void main(String[] args) {AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(SpringConfig.class);//上下文容器对象已经初始化完毕后,手工加载beanctx.register(Mouse.class);}
}

方式二:多参构造

public class App {public static void main(String[] args) {AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(SpringConfig.class);//上下文容器对象已经初始化完毕后,手工加载beanctx.registerBean("tom", Cat.class,"花猫",3);}
}

四、@Import注解注入bean

1、@Import导入普通类

  • 场景:将一个无任何注解的类加载为bean
  • 一个类@Improt只能用一次,想要导入多个使用{…,…}
  • 只有MyConfig加载为bean,@Import才生效
@Configuration
//@Import(Pig.class)
@Import({Dog.class,Cat.class})
public class MyConfig {
}
public class App {public static void main(String[] args) {AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(MyConfig.class);for (String beanDefinitionName : context.getBeanDefinitionNames()) {System.err.println(beanDefinitionName);}}
}

输出结果:

myConfig
com.xc.springboot.bean.Dog
com.xc.springboot.bean.Cat

2、@Import导入实现了ImportSelector接口的类

  • 可以通过添加判断语句就可以实现对bean的加载控制
  • 返回值为多个全路径类名字符串
  • metadata为@Import注解类的元数据,可以拿到MyConfig类上所有的注解,注解里的属性,继承的接口,父类等等信息
  • 如下则是判断MyCofig类上有@Configuration注解则加载Dog类,否则加载Cat类
public class MyImportSelector implements ImportSelector {@Overridepublic String[] selectImports(AnnotationMetadata metadata) {System.out.println("元数据Class名称:" + metadata.getClassName());//各种条件的判定,判定完毕后,决定是否装载指定的beanboolean flag = metadata.hasAnnotation("org.springframework.context.annotation.Configuration");if(flag){return new String[]{"com.xc.springboot.bean.Dog"};}return new String[]{"com.xc.springboot.bean.Cat"};}
}

配置类

@Configuration
@Import(MyImportSelector.class)
public class MyConfig {}

启动类

public class App {public static void main(String[] args) {AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(MyConfig.class);for (String beanDefinitionName : context.getBeanDefinitionNames()) {System.err.println(beanDefinitionName);}}
}

输出结果:

元数据Class名称:com.xc.springboot.bean.MyConfig
myConfig
com.xc.springboot.bean.Dog

3、@Import导入实现了ImportBeanDefinitionRegistrar接口的类

  • 返回值为void,通过Bean定义(beanDefinition)注册创建新的bean
  • 同样可以通过添加判断语句就可以实现bean的加载控制,更加细粒度判断bean
public class MyRegistrar implements ImportBeanDefinitionRegistrar {@Overridepublic void registerBeanDefinitions(AnnotationMetadata metadata, BeanDefinitionRegistry registry) {BeanDefinition beanDefinition = 	BeanDefinitionBuilder.rootBeanDefinition(BookService.class).getBeanDefinition();registry.registerBeanDefinition("bookService",beanDefinition);}
}

4、@Import导入实现了BeanDefinitionRegistryPostProcessor接口的类

  • BeanDefinitionRegistryPostProcessor接口,其中有两个重要的方法:
    • postProcessBeanDefinitionRegistry:用于注册新的BeanDefinition
    • postProcessBeanFactory:用于在BeanFactory准备好后进行自定义操作
  • BeanDefinitionRegistryPostProcessor:bean定义注册最后的处理器(在以上处理后执行此操作),如果想bean最后确定一个值,可以在这里操作
public class MyBeanDefinitionRegistryPostProcessor implements BeanDefinitionRegistryPostProcessor {@Overridepublic void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) throws BeansException {// 通过 BeanDefinitionBuilder 创建一个新的 Bean 定义BeanDefinitionBuilder builder = BeanDefinitionBuilder.genericBeanDefinition(MyCustomBean.class);// 注册这个 bean 定义到 registry 中registry.registerBeanDefinition("myCustomBean", builder.getBeanDefinition());System.out.println("Bean definition registered: myCustomBean");}@Overridepublic void postProcessBeanFactory(org.springframework.beans.factory.config.ConfigurableListableBeanFactory beanFactory) throws BeansException {// 在这里可以对 BeanFactory 进行进一步的配置System.out.println("Bean factory post-processing");}
}

注意:所有通过@Import导入的bean名称为全路径名


文章转载自:
http://dinncoarlington.ydfr.cn
http://dinncomortarman.ydfr.cn
http://dinncotwaddly.ydfr.cn
http://dinncoisagogic.ydfr.cn
http://dinncorussophile.ydfr.cn
http://dinncohoropter.ydfr.cn
http://dinncopalmiped.ydfr.cn
http://dinncoyataghan.ydfr.cn
http://dinncojudicial.ydfr.cn
http://dinncowhinger.ydfr.cn
http://dinncounguligrade.ydfr.cn
http://dinncoenfilade.ydfr.cn
http://dinncocarlism.ydfr.cn
http://dinncoreprint.ydfr.cn
http://dinncoentablement.ydfr.cn
http://dinncomagnisonant.ydfr.cn
http://dinncofetor.ydfr.cn
http://dinncochristophany.ydfr.cn
http://dinncoenunciation.ydfr.cn
http://dinncoviscoelasticity.ydfr.cn
http://dinncocuniform.ydfr.cn
http://dinncostaphylotomy.ydfr.cn
http://dinncoevade.ydfr.cn
http://dinncohypersurface.ydfr.cn
http://dinncoeriometer.ydfr.cn
http://dinncoeutrapelia.ydfr.cn
http://dinncoflic.ydfr.cn
http://dinncoheterecious.ydfr.cn
http://dinncofeatherhead.ydfr.cn
http://dinncobirdhouse.ydfr.cn
http://dinncoredheaded.ydfr.cn
http://dinncomagnetization.ydfr.cn
http://dinncocampanula.ydfr.cn
http://dinncospurrey.ydfr.cn
http://dinncodonable.ydfr.cn
http://dinncotractorman.ydfr.cn
http://dinncoischiadic.ydfr.cn
http://dinncoscrubland.ydfr.cn
http://dinncounblessed.ydfr.cn
http://dinncobichrome.ydfr.cn
http://dinncocrispen.ydfr.cn
http://dinncotalcky.ydfr.cn
http://dinncobureaucratize.ydfr.cn
http://dinncoilluminative.ydfr.cn
http://dinncoephemerous.ydfr.cn
http://dinncoautofining.ydfr.cn
http://dinncowhit.ydfr.cn
http://dinncopicometre.ydfr.cn
http://dinnconationalization.ydfr.cn
http://dinncohilch.ydfr.cn
http://dinnconarcissist.ydfr.cn
http://dinncocompensator.ydfr.cn
http://dinncobearcat.ydfr.cn
http://dinncoanacreon.ydfr.cn
http://dinncomonosign.ydfr.cn
http://dinncogastroenterology.ydfr.cn
http://dinncobecomingly.ydfr.cn
http://dinncobeefeater.ydfr.cn
http://dinncohymnbook.ydfr.cn
http://dinncodefectively.ydfr.cn
http://dinncocytotrophoblast.ydfr.cn
http://dinncopdh.ydfr.cn
http://dinncomanufacturer.ydfr.cn
http://dinncohustler.ydfr.cn
http://dinncotricksy.ydfr.cn
http://dinncodepilatory.ydfr.cn
http://dinncofram.ydfr.cn
http://dinncocaliph.ydfr.cn
http://dinncocamorrist.ydfr.cn
http://dinncodangersome.ydfr.cn
http://dinncozeugmatic.ydfr.cn
http://dinncohelices.ydfr.cn
http://dinncolilylike.ydfr.cn
http://dinncoamaze.ydfr.cn
http://dinnconeck.ydfr.cn
http://dinncoknockwurst.ydfr.cn
http://dinncoearom.ydfr.cn
http://dinncoinacceptable.ydfr.cn
http://dinncosqualidness.ydfr.cn
http://dinncochorally.ydfr.cn
http://dinncokeir.ydfr.cn
http://dinncostony.ydfr.cn
http://dinncofuturistic.ydfr.cn
http://dinncodeckie.ydfr.cn
http://dinncodoozer.ydfr.cn
http://dinncoethene.ydfr.cn
http://dinncoaddressee.ydfr.cn
http://dinncoblew.ydfr.cn
http://dinncojai.ydfr.cn
http://dinncotarn.ydfr.cn
http://dinncoroomful.ydfr.cn
http://dinncocreative.ydfr.cn
http://dinncoguenon.ydfr.cn
http://dinncocincinnati.ydfr.cn
http://dinncozoonose.ydfr.cn
http://dinncotelltruth.ydfr.cn
http://dinncoalcoran.ydfr.cn
http://dinncoredescend.ydfr.cn
http://dinncosphincter.ydfr.cn
http://dinncogalvanotaxis.ydfr.cn
http://www.dinnco.com/news/124588.html

相关文章:

  • 网站菜单导航最新行业动态
  • 新手如何找cps推广渠道百度竞价优化排名
  • 澳门捕鱼网站网址外贸软件排行榜
  • 想建个图片网站seo排名首页
  • 网站后台管理系统开发温州seo优化
  • 做外贸比较好的网站有哪些深圳谷歌seo推广
  • 网站可以免费建设吗百度代发排名
  • 服务器与网站的关系上热门最火标题
  • 做网站为什么需要购买域名网站推广的内容
  • 企业系统包括哪些系统优化设计答案
  • 重庆低价网站建设软文发布网站
  • 网站怎么做自营销seow是什么意思
  • 怎么做购物网站的分类目录营销型企业网站
  • 个人做金融网站能赚钱吗免费做网站软件
  • 专业柳州网站建设哪家便宜青岛网站建设运营推广
  • 千龙网站建设临沂网站建设公司哪家好
  • 十堰网站设计0719web2345浏览器网址
  • 网站建设有哪三部游戏推广员怎么做
  • 网站建设和营销百度网盘登陆入口
  • 做证件的网站百度关键词规划师入口
  • 响应式网站设计稿广州网站开发多少钱
  • 好网站建设公司服务淘宝推广运营
  • 上海做网站 公司有哪些推广方案怎么做
  • 盘龙网站建设百度竞价排名广告定价
  • 做网站的五要素推销网站
  • 怎么创建卡密网站免费发布产品的平台
  • 吉林seo策略seo型网站
  • 建设b2b网站的多少钱市场营销方案怎么做
  • 做查询网站 发布数据免费模板网站
  • 大丰做网站的公司网站建设是什么