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

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

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

瀏覽:11日期: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久久,三上悠亚国产精品一区二区三区
精品一区二区三区中文字幕在线| 国内精品99| 首页国产欧美日韩丝袜| 日韩一级不卡| 蜜桃传媒麻豆第一区在线观看| 三级欧美韩日大片在线看| 视频精品一区二区| 女主播福利一区| 中文字幕日韩亚洲| 日韩黄色av| 国产精品久久久久久久久免费高清 | 日韩1区2区日韩1区2区| 日韩精品成人在线观看| 国产精品一区二区99| 久久精品国产99国产| 日韩精品欧美| 中文字幕日韩亚洲| 精品视频99| 日韩欧美字幕| 成人在线视频中文字幕| 国产精品第一国产精品| 99久久夜色精品国产亚洲狼| 日韩在线二区| 91精品国产自产精品男人的天堂 | 少妇久久久久| 蜜桃久久久久| 欧美日韩1区2区3区| 午夜精品影视国产一区在线麻豆| 亚洲欧美日韩综合国产aⅴ| 精品丝袜在线| 欧美日韩激情| 性色av一区二区怡红| 一本一道久久a久久精品蜜桃| 日韩一区三区| 亚洲伊人影院| 国产精品成人自拍| 免费高潮视频95在线观看网站| 国产一区成人| 精品一级视频| 悠悠资源网久久精品| 欧美日韩网址| 成人在线视频中文字幕| 玖玖精品视频| 精品一区二区三区中文字幕 | 伊人久久亚洲| 国产成人精品亚洲线观看| 亚洲精品中文字幕乱码| 国产欧美日韩精品高清二区综合区 | 久久久久欧美精品| 日韩二区三区在线观看| 日韩一区二区三区免费播放| 亚洲精品黄色| 欧洲av不卡| 欧美日韩亚洲一区| 精品欧美激情在线观看| 久久精品凹凸全集| 99国产精品视频免费观看一公开| 国产精品videossex久久发布| 欧美在线网站| 首页国产精品| 国产精品亚洲综合色区韩国| 亚洲一区二区三区四区五区午夜| 韩国一区二区三区视频| 亚洲日产国产精品| 免费av一区二区三区四区| 欧美精品成人| 日韩黄色av| 六月丁香综合| 久久免费黄色| 日韩a一区二区| 国产美女撒尿一区二区| 石原莉奈在线亚洲二区| 日韩一级网站| 久久久水蜜桃av免费网站| 91亚洲国产成人久久精品| 国产精品成人自拍| 久久国产日韩欧美精品| 国产一区导航| 亚洲欧美日韩精品一区二区| 久久视频一区| 91精品国产成人观看| 不卡一二三区| 国产成人1区| 精品国产乱码久久久久久樱花| 国产日韩欧美一区二区三区在线观看| 日韩精品一级| 日韩av网站免费在线| 日韩精品欧美大片| 日韩在线观看中文字幕| 亚洲精品四区| 久久久精品日韩| 欧美影院三区| 日韩久久视频| 91看片一区| 在线观看精品| 欧美sss在线视频| 亚洲黄色中文字幕| av资源亚洲| 久久久久免费av| 五月婷婷亚洲| 蜜乳av另类精品一区二区| 日韩视频在线一区二区三区 | 欧美日韩91| 欧美精品三级在线| 久久精品 人人爱| 欧美黑人巨大videos精品| 美女视频网站久久| 成人国产精品久久| 桃色av一区二区| 日韩在线观看| 久久精品在线| 国产精品毛片| 综合亚洲视频| 国产精品色在线网站| 麻豆成人91精品二区三区| 精品国产乱码久久久| 日韩综合在线| 国产99精品| 综合日韩av| 日韩网站在线| 欧美日一区二区三区在线观看国产免 | 美女精品一区二区| 欧美aa一级| 丝袜脚交一区二区| 91精品国产经典在线观看| 国产欧美久久一区二区三区| 国产成人精品一区二区三区视频 | 日本不卡一区二区| 国产精品视频一区视频二区| 成人在线视频免费| 欧美日韩亚洲在线观看| 蜜臀国产一区二区三区在线播放| 日韩成人一级| 夜鲁夜鲁夜鲁视频在线播放| 国产午夜精品一区二区三区欧美| 日本不卡视频在线| 91亚洲自偷观看高清| 午夜精品一区二区三区国产| 深夜福利一区| 日韩国产一区二区三区| 日韩中文字幕一区二区三区| 国产成人免费视频网站视频社区| 91久久中文| 久久av免费看| 欧美精品一二| 欧美精品中文| 欧美成人综合| 五月精品视频| 精品欧美日韩精品| 丝袜美腿亚洲一区| 91偷拍一区二区三区精品| 蜜桃视频在线观看一区| 精品视频网站| 天堂成人国产精品一区| 福利一区二区免费视频| 中文无码久久精品| 久久久9色精品国产一区二区三区| 亚洲精品进入| 亚洲福利一区| 免费看久久久| 中文字幕亚洲在线观看| 日本少妇一区| 国产精品日本一区二区三区在线| 国产综合欧美| 麻豆成人91精品二区三区| 蜜臀av国产精品久久久久| 亚洲精品福利电影| 日韩精品免费视频一区二区三区 | 久久九九电影| 久久伊人国产| 日韩精品一级| 免费视频国产一区| 久久精品国内一区二区三区| 中文字幕亚洲精品乱码| 五月婷婷六月综合| 波多视频一区| 国产精品3区| 日韩专区视频网站| 亚洲二区精品| 日韩一区三区| 久久精品午夜| 日韩一区二区三区精品| 久久国产电影| 亚洲激情另类| 亚洲福利免费| 三上悠亚国产精品一区二区三区| 欧美国产极品| 欧美日本精品| 日韩精品91亚洲二区在线观看| 9久re热视频在线精品| 88xx成人免费观看视频库| 麻豆一区二区三| 国产精品中文字幕制服诱惑| 亚洲人成亚洲精品| 久久午夜影视| 99国产精品久久久久久久| 91tv亚洲精品香蕉国产一区| 高清一区二区| 精品免费av| 久久这里只有|