Spring使用IOC與DI實(shí)現(xiàn)完全注解開(kāi)發(fā)
方式一:@Component + @ComponentScan + @Value + @Autowired
首先還是pom文件,maven項(xiàng)目依賴(lài)必不可少。
<dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.2.5.RELEASE</version> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.20</version> </dependency> <dependency> <groupId>javax.annotation</groupId> <artifactId>javax.annotation-api</artifactId> <version>1.3.2</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <scope>test</scope> </dependency> </dependencies>
然后,寫(xiě)兩個(gè)Java Bean,一個(gè)是Student學(xué)生類(lèi)、另一個(gè)是School學(xué)校類(lèi)。
由于不寫(xiě)xml配置,所以在兩個(gè)類(lèi)上方都要加上 @Component 注解,通過(guò)注解的方式將其交給Spring IOC容器管理,@Value注解則用于給8種基本數(shù)據(jù)類(lèi)型以及String類(lèi)型做依賴(lài)注入,@Autowired是針對(duì)引用類(lèi)型的,這里不再多說(shuō)了。
package com.szh.bean; import lombok.Data; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; /** * */ @Data @Component public class Student { @Value("張起靈") private String name; @Value("20") private Integer age; @Autowired private School school; }
package com.szh.bean; import lombok.Data; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; /** * */ @Data @Component public class School { @Value("北京大學(xué)") private String name; @Value("北京市海淀區(qū)") private String address; }
下面要寫(xiě)一個(gè)配置類(lèi),功能就是添加包掃描機(jī)制,確保上面那兩個(gè)@Component 注解修飾的Java Bean可以被Spring掃描并添加至容器中。
package com.szh.config; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; /** * */ @Configuration @ComponentScan(basePackages = "com.szh.bean") public class SpringConfig { }
最后是我們的測(cè)試類(lèi)了。
package com.szh; import com.szh.bean.Student; import com.szh.config.SpringConfig; import org.junit.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.AnnotationConfigApplicationContext; /** * */ public class MyTest { @Test public void testIocAnnotation() { ApplicationContext ioc = new AnnotationConfigApplicationContext(SpringConfig.class); Student student = (Student) ioc.getBean("student"); System.out.println(student); } }
方式二:@Configuration + @Bean
pom文件和方式一是一樣的。
下面是不一樣的Java Bean。
package com.szh.entity; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; /** * */ @Data @NoArgsConstructor @AllArgsConstructor public class Goods { private String name; private String info; }
package com.szh.entity; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import java.math.BigDecimal; /** * */ @Data @NoArgsConstructor @AllArgsConstructor public class Order { private Integer id; private BigDecimal totalFee; private Goods goods; }
然后是該方式對(duì)應(yīng)的配置類(lèi),采用@Bean實(shí)現(xiàn)。
package com.szh.config; import com.szh.entity.Goods; import com.szh.entity.Order; import org.springframework.beans.factory.annotation.Autowire; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import java.math.BigDecimal; /** * */ @Configuration public class SpringConfig2 { @Bean public Goods goods() { return new Goods("聯(lián)想-拯救者", "一款不錯(cuò)的游戲筆記本"); } @Bean public Order order(Goods goods) { return new Order(1, new BigDecimal(9999), goods); } }
最后是這種方式的測(cè)試類(lèi)代碼。
@Test public void testIocAnnotation2() { ApplicationContext ioc = new AnnotationConfigApplicationContext(SpringConfig2.class); Order order = (Order) ioc.getBean("order"); System.out.println(order); System.out.println("IOC容器中存在的bean如下:"); String[] beanDefinitionNames = ioc.getBeanDefinitionNames(); for (String bean : beanDefinitionNames) { System.out.println(bean); } }
到此這篇關(guān)于Spring使用IOC與DI實(shí)現(xiàn)完全注解開(kāi)發(fā)的文章就介紹到這了,更多相關(guān)Spring完全注解 內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Spring boot基于JPA訪(fǎng)問(wèn)MySQL數(shù)據(jù)庫(kù)的實(shí)現(xiàn)
本文主要介紹了Spring boot基于JPA訪(fǎng)問(wèn)MySQL數(shù)據(jù)庫(kù)的實(shí)現(xiàn),Spring boot結(jié)合Jpa 能夠簡(jiǎn)化創(chuàng)建 JPA 數(shù)據(jù)訪(fǎng)問(wèn)層和跨存儲(chǔ)的持久層功能,用戶(hù)的持久層Dao接口只需要繼承定義好的接口,感興趣的可以了解一下2021-06-06Java中抽象類(lèi)用法與注意點(diǎn)實(shí)例詳解
這篇文章主要介紹了Java中抽象類(lèi)用法與注意點(diǎn),結(jié)合實(shí)例形式詳細(xì)分析了java抽象類(lèi)的定義、使用及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下2019-08-08Android中比較常見(jiàn)的Java super關(guān)鍵字
這篇文章主要為大家介紹了Android中比較常見(jiàn)的Java super關(guān)鍵字,具有一定的學(xué)習(xí)參考價(jià)值,感興趣的小伙伴們可以參考一下2016-01-01使用springboot的jar包能夠以service方式啟動(dòng)
這篇文章主要介紹了使用springboot的jar包能夠以service方式啟動(dòng),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-10-10Java swing實(shí)現(xiàn)酒店管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了Java swing實(shí)現(xiàn)酒店管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-02-02執(zhí)行java請(qǐng)求時(shí)導(dǎo)致在腳本執(zhí)行結(jié)束時(shí)JVM無(wú)法退出
這篇文章主要介紹了執(zhí)行java請(qǐng)求,導(dǎo)致在腳本執(zhí)行結(jié)束時(shí)JVM無(wú)法退出問(wèn)題,本文通過(guò)原因分析給出解決方案,需要的朋友可以參考下2020-02-02Spring?boot2.0?實(shí)現(xiàn)日志集成的方法(2)
這篇文章主要介紹了Spring?boot2.0?實(shí)現(xiàn)日志集成的方法,上一章講解了spring?boot日志簡(jiǎn)單集成,這篇我們將日志進(jìn)行分類(lèi),常規(guī)日志、異常日志、監(jiān)控日志等,需要將日志輸出到不同的文件,具體內(nèi)容需要的小伙伴可以參考一下2022-04-04Java求解兩個(gè)非負(fù)整數(shù)最大公約數(shù)算法【循環(huán)法與遞歸法】
這篇文章主要介紹了Java求解兩個(gè)非負(fù)整數(shù)最大公約數(shù)算法,結(jié)合實(shí)例形式分析了java求解最大公約數(shù)的實(shí)現(xiàn)方法,并附帶了循環(huán)法與遞歸法算法思路,需要的朋友可以參考下2018-03-03