日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

Springboot自動裝配實現過程代碼實例

瀏覽:10日期:2023-05-12 16:40:35

創建一個簡單的項目:

<?xml version='1.0' encoding='UTF-8'?><project xmlns='http://maven.apache.org/POM/4.0.0' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:schemaLocation='http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd'> <modelVersion>4.0.0</modelVersion> <parent> <artifactId>spring-boot-starter-parent</artifactId> <groupId>org.springframework.boot</groupId> <version>2.1.12.RELEASE</version> </parent> <groupId>com.xiazhi</groupId> <artifactId>demo</artifactId> <version>1.0-SNAPSHOT</version> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> </dependency> </dependencies></project>

首先創建自定義注解:

package com.xiazhi.demo.annotation;import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;/** * MyComponent 作用于類上,表示這是一個組件,于component,service注解作用相同 * @author zhaoshuai */@Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)public @interface MyComponent {}

package com.xiazhi.demo.annotation;import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;/** * 作用于字段上,自動裝配的注解,與autowired注解作用相同 * @author zhaoshuai */@Target(ElementType.FIELD)@Retention(RetentionPolicy.RUNTIME)public @interface Reference {}

然后寫配置類:

package com.xiazhi.demo.config;import com.xiazhi.demo.annotation.MyComponent;import org.springframework.beans.factory.support.BeanDefinitionRegistry;import org.springframework.context.ResourceLoaderAware;import org.springframework.context.annotation.ClassPathBeanDefinitionScanner;import org.springframework.context.annotation.ImportBeanDefinitionRegistrar;import org.springframework.core.io.ResourceLoader;import org.springframework.core.type.AnnotationMetadata;import org.springframework.core.type.filter.AnnotationTypeFilter;/** * @author ZhaoShuai * @company lihfinance.com * @date Create in 2020/3/21 **/public class ComponentAutoConfiguration implements ImportBeanDefinitionRegistrar, ResourceLoaderAware { private ResourceLoader resourceLoader; @Override public void registerBeanDefinitions(AnnotationMetadata annotationMetadata, BeanDefinitionRegistry beanDefinitionRegistry) { String className = annotationMetadata.getClassName(); String basePackages = className.substring(0, className.lastIndexOf('.')); ClassPathBeanDefinitionScanner scanner = new ClassPathBeanDefinitionScanner(beanDefinitionRegistry, false); scanner.addIncludeFilter(new AnnotationTypeFilter(MyComponent.class)); scanner.scan(basePackages); scanner.setResourceLoader(resourceLoader); } @Override public void setResourceLoader(ResourceLoader resourceLoader) { this.resourceLoader = resourceLoader; }}

上面是配置掃描指定包下被MyComponent注解標注的類并注冊為spring的bean,bean注冊成功后,下面就是屬性的注入了

package com.xiazhi.demo.config;import com.xiazhi.demo.annotation.MyComponent;import com.xiazhi.demo.annotation.Reference;import org.springframework.beans.BeansException;import org.springframework.beans.factory.config.BeanPostProcessor;import org.springframework.boot.SpringBootConfiguration;import org.springframework.context.ApplicationContext;import org.springframework.context.ApplicationContextAware;import org.springframework.context.annotation.Bean;import org.springframework.util.ReflectionUtils;import java.lang.reflect.Field;/** * @author ZhaoShuai * @company lihfinance.com * @date Create in 2020/3/21 **/@SpringBootConfigurationpublic class Configuration implements ApplicationContextAware { private ApplicationContext applicationContext; @Bean public BeanPostProcessor beanPostProcessor() { return new BeanPostProcessor() { /** * @company lihfinance.com * @author create by ZhaoShuai in 2020/3/21 * 在bean注冊前會被調用 * @param [bean, beanName] * @return java.lang.Object **/ @Override public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {return bean; } /** * @company lihfinance.com * @author create by ZhaoShuai in 2020/3/21 * 在bean注冊后會被加載,本次在bean注冊成功后注入屬性值 * @param [bean, beanName] * @return java.lang.Object **/ @Override public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {Class<?> clazz = bean.getClass();if (!clazz.isAnnotationPresent(MyComponent.class)) { return bean;}Field[] fields = clazz.getDeclaredFields();for (Field field : fields) { if (!field.isAnnotationPresent(Reference.class)) { continue; } Class<?> type = field.getType(); Object obj = applicationContext.getBean(type); ReflectionUtils.makeAccessible(field); ReflectionUtils.setField(field, bean, obj);}return bean; } }; } @Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { this.applicationContext = applicationContext; }}

下面開始使用注解來看看效果:

package com.xiazhi.demo.service;import com.xiazhi.demo.annotation.MyComponent;import javax.annotation.PostConstruct;/** * @author ZhaoShuai * @company lihfinance.com * @date Create in 2020/3/21 **/@MyComponentpublic class MyService { @PostConstruct public void init() { System.out.println('hello world'); } public void test() { System.out.println('測試案例'); }}

package com.xiazhi.demo.service;import com.xiazhi.demo.annotation.MyComponent;import com.xiazhi.demo.annotation.Reference;/** * @author ZhaoShuai * @company lihfinance.com * @date Create in 2020/3/21 **/@MyComponentpublic class MyConsumer { @Reference private MyService myService; public void aaa() { myService.test(); }}

啟動類要引入配置文件:

Springboot自動裝配實現過程代碼實例

import注解引入配置文件。

編寫測試類測試:

@SpringBootTest(classes = ApplicationRun.class)@RunWith(SpringRunner.class)public class TestDemo { @Autowired public MyConsumer myConsumer; @Test public void fun1() { myConsumer.aaa(); }}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: Spring
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
天堂√8在线中文| 首页国产欧美日韩丝袜| 久久精品国产在热久久| 麻豆高清免费国产一区| 欧美亚洲国产激情| 国产精品99在线观看| 国产精品日韩精品中文字幕| 影音先锋久久精品| 午夜亚洲精品| 狠狠色综合网| 图片区亚洲欧美小说区| 国产麻豆一区| 中文字幕av亚洲精品一部二部| 精品中文在线| 狠狠久久伊人| 国产精品2023| 欧美精品成人| 成人台湾亚洲精品一区二区| 欧美精品国产白浆久久久久| 欧美精品中文| 国产亚洲欧美日韩在线观看一区二区| 久久国产精品久久久久久电车| 精品欧美激情在线观看| 欧美三级网址| av在线资源| 久久电影tv| 四虎884aa成人精品最新| 日韩专区一卡二卡| 欧美日韩国产精品一区二区亚洲| 亚洲永久av| 亚洲综合二区| 亚洲bt欧美bt精品777| 国产精品久久久久久久免费软件| 99精品在线| 久久99久久久精品欧美| 在线观看免费一区二区| 国产精品mm| 亚洲另类av| 国精品一区二区三区| 国产精品一区二区三区美女 | 日韩欧美中文字幕在线视频| 麻豆成人av在线| 首页国产欧美日韩丝袜| 激情久久一区二区| 亚洲男女av一区二区| 久久精品国产在热久久| 一区久久精品| 国产色99精品9i| 精品三区视频| 欧美中文一区| 免费福利视频一区二区三区| 视频一区视频二区中文| 久久不卡日韩美女| 免费福利视频一区二区三区| 久久大逼视频| 欧美精品资源| 欧美国产日本| 99国产精品99久久久久久粉嫩| 欧美日一区二区三区在线观看国产免 | 成人台湾亚洲精品一区二区| 欧美日韩视频一区二区三区| 欧美日本不卡| 美女尤物久久精品| 欧美韩一区二区| 在线视频精品| 日韩天堂在线| 免费视频一区二区三区在线观看| 天堂成人国产精品一区| 精品欧美日韩精品| 日韩精品电影一区亚洲| 五月天久久久| 精品国模一区二区三区| 久久不见久久见中文字幕免费| 麻豆精品视频在线观看免费| 六月丁香综合| 亚洲免费高清| 日本欧美不卡| 国产一区二区三区精品在线观看| 蜜臀av在线播放一区二区三区 | 欧美日韩在线观看视频小说| 国产精品sss在线观看av| 午夜亚洲福利| 日韩在线黄色| 亚洲精品无吗| 亚洲精品成人一区| 好看的亚洲午夜视频在线| 女同性一区二区三区人了人一| 欧美精品资源| 91高清一区| 日韩中文字幕麻豆| 亚洲午夜91| 欧美日韩四区| 亚洲伊人影院| 日韩成人一级| 韩日一区二区| 国内精品福利| 欧美日韩三区| 嫩草伊人久久精品少妇av杨幂| 卡一卡二国产精品| 亚洲不卡系列| 男女精品网站| 麻豆精品一区二区综合av| 成人国产精品一区二区免费麻豆| 亚洲综合精品四区| 欧美日韩1区| 国产成人精选| 国产精品7m凸凹视频分类| 免费看欧美美女黄的网站| 国产精品videosex极品| 日韩中文在线电影| 亚洲精品综合| 国产精品国产一区| 日韩毛片视频| 伊人久久亚洲热| 欧美影院视频| 天堂va在线高清一区| 精品国产aⅴ| 日韩在线卡一卡二| 美女国产精品久久久| 精品1区2区3区4区| 国产精品久久乐| 偷拍欧美精品| 国产一区2区| 亚洲精品成a人ⅴ香蕉片| 精品欧美日韩精品| 日本综合精品一区| 日韩精品1区| 中文在线日韩| 亚洲精品永久免费视频| 日韩精品一二三区| 日韩精品诱惑一区?区三区| 日韩一区中文| 亚洲欧洲另类| 日韩成人三级| 精品国产乱码久久久久久樱花| 久久人人99| 91精品麻豆| 国产精品欧美三级在线观看| 日韩欧美午夜| 麻豆成全视频免费观看在线看| 日韩av中文字幕一区二区三区| 国产精品av久久久久久麻豆网| 美女亚洲一区| 欧美日韩在线二区| а√天堂8资源中文在线| 国产精品一区二区免费福利视频 | 国产高清亚洲| 免费久久99精品国产| 伊人精品视频| 日产精品一区二区| 久久免费福利| 国产精品亚洲欧美日韩一区在线 | 国产成人精品亚洲线观看| 日本不卡一区二区| 亚洲一区亚洲| 日韩高清在线不卡| 欧美综合精品| 精品亚洲二区| 成人片免费看| 午夜精品一区二区三区国产| 欧美成人精品| 国产精品毛片在线| 亚洲精品极品| 伊人久久亚洲| 欧美精品日日操| 久久精品官网| 亚洲一区欧美二区| 日韩精彩视频在线观看| 蜜桃精品视频| 久久国产免费| 国产精品sss在线观看av| 福利一区在线| 亚洲欧美日韩国产综合精品二区| 欧美一级专区| 久久国产欧美日韩精品| 欧美xxxx性| 999视频精品| 久久激情一区| 亚洲精品福利| 成人欧美一区二区三区的电影| 欧美在线资源| 日韩av在线免费观看不卡| 国产欧美一区二区三区精品观看| 国产美女高潮在线| 中文无码久久精品| 人在线成免费视频| 日韩av影院| 欧美日韩黑人| 日韩视频一区| 麻豆国产91在线播放| 日韩中文字幕亚洲一区二区va在线| 欧美日韩夜夜| 久久福利一区| 1024精品一区二区三区| 国产精品毛片aⅴ一区二区三区| 一区在线免费| 色婷婷精品视频| 久久99久久人婷婷精品综合| 欧美激情91| 国产欧美日韩视频在线|