程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Spring的@Autowired問題

Spring的@Autowired問題

編輯:關於JAVA

Spring2之後,出現很多注解,這些注解讓Spring的配置變得混亂起來,因此 ,別人力排Spring的注解。

注解引發的問題:

1、缺乏明確的配置導致程序的依賴注入關系不明確。

2、不利於模塊化的裝配。

3、給維護帶來麻煩,因為你要根據源代碼找到依賴關系。

4、通用性不好。如果你哪天拋開了Spring,換了別的Ioc容器,那麼你的注解 要一個個的刪除。

但是很多傻X級的程序員還偶爾給你用點,或半用半不用,當你問及的時候, 還一本正經的說某某某書上就是這麼用的!!!如果你接手他的代碼,會很郁悶 。

這裡寫個例子,為的是看懂帶注解的代碼,不是推崇注解有多高級,真沒必要 。

package lavasoft.springstu.anno;
/**
* 一個普通的Bean
*
* @author leizhimin 2009-12-23 10:40:38
*/
public class Foo {
         private String name;
         public Foo(String name) {
                 this.name = name;
         }
         public String getName() {
                 return name;
         }
         public void setName(String name) {
                 this.name = name;
         }
}

package lavasoft.springstu.anno;
import org.springframework.beans.factory.annotation.Autowired;
/**
* Spring自動裝配的注解
*
* @author leizhimin 2009-12-23 10:41:55
*/
public class Bar {
         @Autowired(required = true)
         private Foo foo;
         public void f1() {
                 System.out.println(foo.getName ());
         }
}

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
              xmlns:context="http://www.springframework.org/schema/context"
              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">
         <!-- 引用@Autowired必須定義這個bean -->
         <bean  class="org.springframework.beans.factory.annotation.AutowiredAnnotation BeanPostProcessor"/>
         <!-- 通過構造方法裝配的Bean -->
         <bean id="foo" class="lavasoft.springstu.anno.Foo">
                 <constructor-arg index="0" type="java.lang.String"  value="aaaa"/>
         </bean>
         <!-- 通過注解裝配的Bean,我還以為它和Foo沒關系呢 -->
         <bean id="bar" class="lavasoft.springstu.anno.Bar"/>
</beans>

package lavasoft.springstu.anno;
import org.springframework.context.ApplicationContext;
import  org.springframework.context.support.ClassPathXmlApplicationContext;
/**
* 測試自動裝配Bean
*
* @author leizhimin 2009-12-23 10:55:35
*/
public class Test1 {
         public static void main(String[] args) {
                 ApplicationContext ctx = new  ClassPathXmlApplicationContext("lavasoft/springstu/anno/cfg1.xml");
                 Bar bar = (Bar) ctx.getBean ("bar");
                 bar.f1();
         }
}

運行結果:

aaaa
Process finished with exit code 0

從上面的代碼中看到,Spring的注解使得配置文件的邏輯很混亂,如果項目中 有大量的類似注解,那維護起來就很困難了。

建議不要使用!

出處:http://lavasoft.blog.51cto.com/62575/247831

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved