日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

spring 组件基于注解的注册方式

發(fā)布時(shí)間:2023/11/27 生活经验 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 spring 组件基于注解的注册方式 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

spring 中常用的組件標(biāo)簽有:

@Controller:控制層

@Service:業(yè)務(wù)層

@Repository:數(shù)據(jù)層

@Component:普通的pojo注入到spring容器

?

組件注冊方式:

?@ComponentScan? 掃描那些要注入到spring容器的組件的包路徑

package com.annotation.component;
import org.springframework.stereotype.Controller;
import org.springframework.context.annotation.Configuration;@Controller
public class PersonController {}package com.annotation.register; import org.springframework.context.annotation.ComponentScan;//表明這是個(gè)注解配置類 @Configuration @ComponentScan(value={"com.annotation.component"}) public class Config {}package com.annotation.register; import org.springframework.context.annotation.AnnotationConfigApplicationContext; import com.annotation.component.controller.PersonController;public class Test {public static void main(String[] args) { AnnotationConfigApplicationContext annotationConfigApplicationContext = new AnnotationConfigApplicationContext(Config.class);PersonController personController = annotationConfigApplicationContext.getBean(PersonController.class);} }

?@bean :主要作用在方法上,name可以指定bean在容器中的名稱,不指定的話默認(rèn)是方法名;initMethod指定bean的初始化方法;destroyMethod指定bean的銷毀方法

package com.annotation.component;public class Blue {}package com.annotation.register;import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import com.annotation.component.bean.Blue;@Configuration  
public class MainConfig {@Bean(name="blue")public Blue getColor(){return new Blue();}}package com.annotation.register;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;import com.annotation.component.bean.Blue;public class Test {public static void main(String[] args) {AnnotationConfigApplicationContext annotationConfigApplicationContext = new AnnotationConfigApplicationContext(MainConfig.class);Blue blue= annotationConfigApplicationContext.getBean(Blue.class);System.out.println(blue);}
}

?@Import? ?:

  • 注入一個(gè)bean
  • 導(dǎo)入ImportSelector的實(shí)現(xiàn)類,selectImports方法里面配置要注入的bean
  • 導(dǎo)入ImportBeanDefinitionRegistrar的實(shí)現(xiàn)類,registerBeanDefinitions方法里面配置要注入的bean

? ? ? ? ? ??

package com.annotation.component.bean;public class Blue {}package com.annotation.component.bean;public class Yellow {}package com.annotation.component.bean;public class Green{}package com.annotation.importbean;import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
import com.annotation.component.bean.White;@Configuration  
@Import(value = { White.class,MyImportSelector.class,MyImportBeanDefinitionRegistrar.class })
public class MainConfig {}package com.annotation.importbean;import org.springframework.context.annotation.ImportSelector;
import org.springframework.core.type.AnnotationMetadata;public class MyImportSelector implements ImportSelector{@Overridepublic String[] selectImports(AnnotationMetadata annotationmetadata) {return new String[]{"com.annotation.component.bean.Yellow"};}}package com.annotation.importbean;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;import com.annotation.component.bean.Green;public class MyImportBeanDefinitionRegistrar implements ImportBeanDefinitionRegistrar{@Overridepublic void registerBeanDefinitions(AnnotationMetadata annotationmetadata,BeanDefinitionRegistry beandefinitionregistry) {RootBeanDefinition beanDefinition = new RootBeanDefinition(Green.class);beandefinitionregistry.registerBeanDefinition("com.annotation.component.bean.Green", beanDefinition);}}package com.annotation.importbean;import org.springframework.context.annotation.AnnotationConfigApplicationContext;public class Test {public static void main(String[] args) {    AnnotationConfigApplicationContext annotationConfigApplicationContext = new AnnotationConfigApplicationContext(MainConfig.class);String[] names = annotationConfigApplicationContext.getBeanDefinitionNames();for (String name : names) {System.out.println(name);}annotationConfigApplicationContext.close();}
}

?implements FactoryBean

  • getObject 方法表示要注入的對象,getObjectType表示對象類型,isSingleton表示是否單例
  • annotationConfigApplicationContext.getBean("colorFactoryBean") 表示獲取的是工程里面注入的對象,即Color
  • annotationConfigApplicationContext.getBean("&colorFactoryBean") 表示獲取的是工程對象本身,即ColorFactoryBean
package com.annotation.component.bean;public class Color {}package com.annotation.factorybean;import org.springframework.beans.factory.FactoryBean;import com.annotation.component.bean.Color;public class ColorFactoryBean implements FactoryBean<Color>{@Overridepublic Color getObject() throws Exception {return new Color();}@Overridepublic Class<?> getObjectType() {return Color.class;}@Overridepublic boolean isSingleton() {return false;}}package com.annotation.factorybean;import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration  
public class MainConfig {@Beanpublic ColorFactoryBean colorFactoryBean(){return new ColorFactoryBean();}}package com.annotation.factorybean;import org.springframework.context.annotation.AnnotationConfigApplicationContext;public class Test {public static void main(String[] args) {AnnotationConfigApplicationContext annotationConfigApplicationContext = new AnnotationConfigApplicationContext(MainConfig.class);Object obj1 = annotationConfigApplicationContext.getBean("colorFactoryBean");Object obj2 = annotationConfigApplicationContext.getBean("colorFactoryBean");
System.out.println(obj1
==obj2);//獲取factorybean 本身Object obj3 = annotationConfigApplicationContext.getBean("&colorFactoryBean");System.out.println(obj3.getClass());annotationConfigApplicationContext.close();} }

?

轉(zhuǎn)載于:https://www.cnblogs.com/chenzhubing/p/11010745.html

總結(jié)

以上是生活随笔為你收集整理的spring 组件基于注解的注册方式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。