一、說明
與@Component註解功能相同,但意義不同的註解還有三個:
1)@Repository:註解在Dao實作類別上
2) @Service:註解在Service實作類別上
3)@Controller:註解在SpringMVC的處理器上
Bean作用域:
@Scope("prototype"):用於指定物件創建模式,可以是單例模式或原型模式,預設是singleton
基本型別屬性注入:
@Value
@Autowired:byType方式的註解式註入,也就是依照型別註解
@Qualifier("mySchool"):byName方式的註解式註入,在使用@Qualifier時必須與@Autowired聯合使用
域屬性註解:
@Resource:不加name屬性則為byType方式的註解式註入,但前提是注入的物件只能有一個
@Resource(name="mySchool"):byName方式的註解式註入
Bean的生命始末:
@PostConstruct:目前Bean初始化剛完畢
@PreDestroy:目前Bean即將被銷毀
@Configuration:表示目前類別充當Spring容器,也就是所有的Bean將由這個類別來建立
註:
在舉例之前宣告幾個問題:
1、註解需要依賴spring-aop-4.3.9.RELEASE.jar包,所以需要導入依賴包。
# 2、使用註解方式註入,設定檔需要添加約束頭檔:
<?xml version="1.0" encoding="UTF-8"?><beans></beans>
也可以自己從Spring的說明文件中找到此頭檔:
3、如果使用到了SpringJUnit4測試,則還需要導入spring-test-4.3.9.RELEASE.jar套件
二、舉例
1、先建立一個School類別:
package com.ietree.spring.basic.annotation.demo1;import org.springframework.beans.factory.annotation.Value;import org.springframework.stereotype.Component; @Component("mySchool")public class School { @Value(value = "清华大学")private String name;public School() {super(); }public School(String name) {super();this.name = name; }public void setName(String name) {this.name = name; } @Overridepublic String toString() {return "School [name=" + name + "]"; } }
建立Student類別:
package com.ietree.spring.basic.annotation.demo1;import javax.annotation.PostConstruct;import javax.annotation.PreDestroy;import javax.annotation.Resource;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.beans.factory.annotation.Qualifier;import org.springframework.beans.factory.annotation.Value;import org.springframework.stereotype.Component;/** * 说明: * 与@Component注解功能相同,但意义不同的注解还有三个: * 1)@Repository:注解在Dao实现类上 * 2)@Service:注解在Service实现类上 * 3)@Controller:注解在SpringMVC的处理器上 * * Bean作用域: * @Scope("prototype"):用于指定对象创建模式,可以是单例模式或者原型模式,默认是singleton * * 基本类型属性注入: * @Value * * @Autowired:byType方式的注解式注入,即根据类型注解 * @Qualifier("mySchool"):byName方式的注解式注入,在使用@Qualifier时必须与@Autowired联合使用 * * 域属性注解: * @Resource:不加name属性则为byType方式的注解式注入,但前提是注入的对象只能有一个 * @Resource(name="mySchool"):byName方式的注解式注入 * * Bean的生命始末: * @PostConstruct:当前Bean初始化刚完毕 * @PreDestroy:当前Bean即将被销毁 *///@Scope("prototype")@Component("myStudent")public class Student { @Value(value = "小明")private String name; @Value(value = "25")private int age; // @Autowired// @Qualifier("mySchool")// @Resource(name="mySchool") @Resourceprivate School school;// 对象属性,也叫做域属性public Student() {super(); } public Student(String name, int age) {super();this.name = name;this.age = age; }public void setName(String name) { System.out.println("执行setName()");this.name = name; }public void setAge(int age) { System.out.println("执行setAge()");this.age = age; }public void setSchool(School school) {this.school = school; } @Overridepublic String toString() {return "Student [name=" + name + ", age=" + age + ", school=" + school + "]"; } @PostConstructpublic void initAfter(){ System.out.println("当前Bean初始化刚完毕"); } @PreDestroypublic void preDestroy(){ System.out.println("当前Bean即将被销毁"); } }
建立MyJavaConfig類別:
package com.ietree.spring.basic.annotation.demo1;import org.springframework.beans.factory.annotation.Autowire;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;/** * @Configuration:表示当前类充当Spring容器,即所有的Bean将由这个类来创建 */@Configurationpublic class MyJavaConfig { @Bean(name="mySchool")public School mySchoolCreator(){return new School("清华大学"); } // autowire=Autowire.BY_TYPE:指从当前类这个容器中查找与域属性的类型具有is-a关系的Bean// autowire=Autowire.BY_NAME:指从当前类这个容器中查找与域属性同名的Bean@Bean(name="myStudent", autowire=Autowire.BY_TYPE)public Student myStudentCreator(){return new Student("小明", 25); } }
#「建立設定檔:
<?xml version="1.0" encoding="UTF-8"?><beans><!-- 扫描 com.ietree.spring.basic.annotation.demo1这个包及其子包 --><component-scan></component-scan><!-- 扫描 com.ietree.spring.basic这个包的子包 --><component-scan></component-scan></beans>
建立測試類別:
package com.ietree.spring.basic.annotation.demo1;import org.junit.Test;import org.junit.runner.RunWith;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;import org.springframework.test.context.ContextConfiguration;import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations="classpath:com/ietree/spring/basic/annotation/demo1/applicationContext.xml")public class MyTest { @Autowiredprivate Student student; @Testpublic void test01() { String resource = "com/ietree/spring/basic/annotation/demo1/applicationContext.xml"; ApplicationContext ctx = new ClassPathXmlApplicationContext(resource); School school = (School) ctx.getBean("mySchool"); System.out.println(school); Student student = (Student) ctx.getBean("myStudent"); System.out.println(student); ((ClassPathXmlApplicationContext)ctx).close(); } public void test02(){ System.out.println(student); } }
以上是java中關於註解功能的詳細介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!

JavadevelovermentIrelyPlatForm-DeTueTososeVeralFactors.1)JVMVariationsAffectPerformanceNandBehaviorAcroSsdifferentos.2)Nativelibrariesviajnijniiniininiinniinindrododerplatefform.3)

Java代碼在不同平台上運行時會有性能差異。 1)JVM的實現和優化策略不同,如OracleJDK和OpenJDK。 2)操作系統的特性,如內存管理和線程調度,也會影響性能。 3)可以通過選擇合適的JVM、調整JVM參數和代碼優化來提升性能。

Java'splatFormentenceHaslimitations不包括PerformanceOverhead,versionCompatibilityIsissues,挑戰WithnativelibraryIntegration,Platform-SpecificFeatures,andjvminstallation/jvminstallation/jvmintenance/jeartenance.therefactorscomplicatorscomplicatethe“ writeOnce”

PlatformIndependendecealLowsProgramStormonanyPlograwsStormanyPlatFormWithOutModification,而LileCross-PlatFormDevelopmentRequiredquiresMomePlatform-specificAdjustments.platFormIndependence,EneblesuniveByjava,EnablesuniversUniversAleversalexecutionbutmayCotutionButMayComproMisePerformance.cross.cross.cross-platformd

JITcompilationinJavaenhancesperformancewhilemaintainingplatformindependence.1)Itdynamicallytranslatesbytecodeintonativemachinecodeatruntime,optimizingfrequentlyusedcode.2)TheJVMremainsplatform-independent,allowingthesameJavaapplicationtorunondifferen

javaispopularforcross-platformdesktopapplicationsduetoits“ writeonce,runany where”哲學。 1)itusesbytiesebyTecodeThatrunsonAnyJvm-備用Platform.2)librarieslikeslikeslikeswingingandjavafxhelpcreatenative-lookingenative-lookinguisis.3)

在Java中編寫平台特定代碼的原因包括訪問特定操作系統功能、與特定硬件交互和優化性能。 1)使用JNA或JNI訪問Windows註冊表;2)通過JNI與Linux特定硬件驅動程序交互;3)通過JNI使用Metal優化macOS上的遊戲性能。儘管如此,編寫平台特定代碼會影響代碼的可移植性、增加複雜性、可能帶來性能開銷和安全風險。

Java將通過雲原生應用、多平台部署和跨語言互操作進一步提昇平台獨立性。 1)雲原生應用將使用GraalVM和Quarkus提升啟動速度。 2)Java將擴展到嵌入式設備、移動設備和量子計算機。 3)通過GraalVM,Java將與Python、JavaScript等語言無縫集成,增強跨語言互操作性。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境

MantisBT
Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具