Spring框架提供DI(屬性注解)和IOC(類/Bean的注解)注解。
注解:標注、注入和解析、解釋;標注和解釋一部分代碼的作用在框架中:就是配置文件的另外一種實現方式@Type、@Taget;減少配置文件的代碼量;提高開發效率
spring注解的步驟:
1、引入命名空間:
xmlns:context="http://www.springframework.org/schema/context" http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd
2、設置注解解析器或者設置類掃描器(兩個設置一個即可)
2、設置注解解析器或者設置類掃描器(兩個設置一個即可) 1、 <!-- 添加注解解析器:用于依賴注入使用;不具備類掃描功能 --> <context:annotation-config/> 2、<!-- 引入注解類掃描器 指定哪些類要加載進入spring容器中 哪些類需要交給spring進行管理 功能:注解解析器功能 類掃描的功能 --> <context:component-scan base-package="com.msit.spring.IOC.Annotation.IOC"></context:component-scan> 3、在要引入的類上標注注解 @Component public class HelloSpring { } === <bean id="helloSpring" Class="com.msit.spring.IOC.Annotation.IOC.HelloSpring"></bean> 4、在要注入的依賴對象(類的屬性)上加上注解標注 @Resource public Student stu;DI(屬性注解)注解原理:1、加載spring配置文件;遇到Bean創建Bean2、查找Bean的屬性;如果有注解標注的屬性;則利用注解解析器進行Spring容器的掃描如果@Resource(name="stu")name不為空則將name的值和spring容器中的Bean的ID進行匹配;匹配成功則注入如果匹配不成功則報錯如果@Resource name屬性為空“”則將會把依賴對象的名稱作為默認值和spring容器中的Bean的ID進行匹配;匹配成功則注入@Resourcepublic Student stu;就相當于@Resource(name="stu")如果名稱匹配不成功;則會按照依賴對象的類型和Bean的類型(Class)進行匹配;匹配成功則注入如果匹配不成功則報錯
第一步:配置applicationContext-annotation-di.xml
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd"> <!-- 添加注解解析器 --> <context:annotation-config/> <bean id="stus" class="com.msit.spring.IOC.Annotation.DI.Student"> <property name="name" value="張三"></property> </bean> <bean id="hellospring" class="com.msit.spring.IOC.Annotation.DI.HelloSpring"></bean></beans>
第二步:Student 實體類和測試類
package com.mist.IOC.entiy;/* * 實體類 */public class Studentds { private String name;//姓名 private String age;//年紀 public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAge() { return age; } public void setAge(String age) { this.age = age; } }package com.mist.IOC.Test;import javax.annotation.Resource;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;import com.mist.IOC.entiy.Studentds;public class HellowSpring { //引入依賴對象@Resourcepublic Studentds stu;public Studentds getStu() { return stu;}public void setStu(Studentds stu) { this.stu = stu;}public static void main(String[] args) { ApplicationContext context=new ClassPathXmlApplicationContext("com/mist/applicationContext2.xml"); HellowSpring te=(HellowSpring) context.getBean("hellowSpring"); System.out.println(te.getStu().getName());}}
效果圖:
IOC(類/Bean的注解)注解原理:1、加載配置文件;當讀取到<context:component-scan base-package="com.msit.spring.IOC.Annotation.IOC"></context:component-scan>回去掃描com.msit.spring.IOC.Annotation.IOC這個包下的所有標注的類(@component)裝配到spring容器中@Componentpublic class HelloSpring {}===<bean id="helloSpring" Class="com.msit.spring.IOC.Annotation.IOC.HelloSpring"></bean>@Component value屬性默認值為“”;spring容器會將類的名稱首字母小寫其他不變作為Bean的ID如果不為空@Component("hellospring")會以設置的值為Bean的ID
第一步:加載applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd"> <!-- 引入注解類掃描器 指定哪些類要加載進入spring容器中 哪些類需要交給spring進行管理 功能:注解解析器功能 類掃描的功能 --> <context:component-scan base-package="com.msit.spring.IOC.Annotation.IOC"></context:component-scan> </beans>
第二步:Student 實體類和測試類
package com.mist.spring.DI;import org.springframework.stereotype.Component;@Component("stu")public class Strudents { private String name="王五"; private String passWord; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } }package com.mist.spring.DI;import javax.annotation.Resource;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;import org.springframework.stereotype.Component;@Component("testSpring")public class TestSpring { //引入依賴對象 @Resource //@Autowired//按照類型查找 //@Qualifier("stus")//按照名稱查找 public Strudents student; public Strudents getStudent() { return student; } public void setStudent(Strudents student) { this.student = student; } public static void main(String[] args) { ApplicationContext context=new ClassPathXmlApplicationContext("com/mist/spring/DI/applicationContext.xml"); TestSpring Hello=(TestSpring) context.getBean("testSpring"); System.out.print(Hello.getStudent().getName()); }}效果圖:
注:
XML和注解對比1、XML代碼量多;開發效率低;可讀性強;執行效率高2、注解配置簡單;開發效率高;可讀性低;執行效率相對于XML偏低;但是對于整個系統而言;影響不是太大
您可以通過點擊 右下角 的按鈕 來對文章內容作出評價, 也可以通過左下方的 關注按鈕 來關注我的博客的最新動態。 如果文章內容對您有幫助, 不要忘記點擊右下角的 推薦按鈕 來支持一下哦 如果您對文章內容有任何疑問, 可以通過評論或發郵件的方式聯系我: 2276292708@QQ.com歡迎加入java ios 安卓技術交流群: 306431857,期待你的加入。如果需要轉載,請注明出處,謝謝!!
新聞熱點
疑難解答