Ⅰ spring註解方式在一個普通的java類裡面注入
不知道你說的「普通的java類」是什麼。 在spring里要注入的話,相應的類都要納入spring的管理,對象由spring創建,對象從spring獲齲就像你上面的BaseDaoImpl和BaseServiceImpl。 如果UserCarManager也是由spring管理的話,那同樣適用@autowired就spring註解方式在一個普通的java類裡面注入
Ⅱ 如何利用Java實現資源注入
Java的功能強大,今兒博洋教育將給大家介紹。 需求:一個應用有兩個資料庫,分別為DB-A,DB-B。 假設持久層框架使用iBatis來實現,那麼SqlMapClient對象在創建時,對於兩個不同的DB連接要有兩個不同的SqlMapClient對象, 假設我們有一個Service類為MyService.java,該類中有兩個SqlMapClient對象sqlMapA、sqlMapB分別對應著DB-A、DB-B。 先看看我們的SqlMapClient.java類:(自定義SqlMapClient類,用來演示。) import java.util.Map; import org.apache.commons.lang.builder.ToStringBuilder; import org.apache.commons.lang.builder.ToStringStyle; @SuppressWarnings("unchecked") public class SqlMapClient { public SqlMapClient(String s, String t) { sqlMap = s; type = t; } public SqlMapClient() { } private String type = null; private String sqlMap = null; // get、set方法 略 // 用於演示查詢後返回一個String的返回結果 public String selectForObject(String sql, Map in) { return this.toString(); } @Override public String toString() { return new ToStringBuilder(this, ToStringStyle.SHORT_PREFIX_STYLE)。append("sqlMap", sqlMap) .append("type", type)。toString(); } } MyService.java類實現: import java.util.Map; @SuppressWarnings("unchecked") public class MyService { @DataSource(type="B", sqlMap="com/annotation/sql-map-config-B.xml") private SqlMapClient sqlMapB = null; @DataSource(type="A", sqlMap="com/annotation/sql-map-config-A.xml") private SqlMapClient sqlMapA = null; // get、set方法 略 // 模擬在DB-B資料庫取得數據 public String selectForObjectFromB(String sql, Map in) { return sqlMapB.selectForObject("", null); } // 模擬在DB-A資料庫取得數據 public String selectForObjectFromA(String sql, Map in) { return sqlMapA.selectForObject("", null); } } 接下來就是我們的註解類:DataSource.java import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @Target(ElementType.FIELD) @Retention(RetentionPolicy.RUNTIME) public @interface DataSource { /** * Dao的類型 * @return */ String type() default "A"; // 連接的資料庫類型 A or B String sqlMap() default ""; // Sql-Map-Config文件的路徑,用於載入iBatis的SqlMapClient對象 } 定義資源注入的介面 IFieldWiring.java。 之所以這里要定義這個介面,是為了以後擴展用,我們很方便的定義更多的自定義註解。 IFieldWiring.java import java.lang.annotation.Annotation; import java.lang.reflect.Field; public interface IFieldWiring { Class clazz = obj.getClass(); try { String methodname = "get" + StringUtils.capitalize(fieldName); Method method = clazz.getDeclaredMethod(methodname); method.setAccessible(true); return method.invoke(obj); } catch (Exception e) { try { Field field = clazz.getDeclaredField(fieldName); field.setAccessible(true); return field.get(obj); } catch (Exception e1) { e1.printStackTrace(); } } return null; } public static void setFieldValue(Object target, String fname, Class fieldClass, Object fieldObj) { if (!fieldClass.isAssignableFrom(fieldObj.getClass())) { return; } Class clazz = target.getClass(); try { Method method = clazz.getDeclaredMethod("set" + Character.toUpperCase(fname.charAt(0)) + fname.substring(1), fieldClass); method.setAccessible(true); method.invoke(target, fieldObj); } catch (Exception e) { try { Field field = clazz.getDeclaredField(fname); field.setAccessible(true); field.set(target, fieldObj); } catch (Exception e1) { e1.printStackTrace(); } } } } 已經基本大功告成了,只要將我們的DataSourceWiring.java類使用起來即可。 MyAnnotationBeanProcessor.java,這個類主要用於為bean對象注入資源。 import java.lang.reflect.Field; public class MyAnnotationBeanProcessor { /** * 注入資源 * @param serviceObject * @param fieldAutoWirings // 所有實現IFieldWiring的介面的對象,我們可以在此擴展 * @throws Exception */ public void wire(Object serviceObject, IFieldWiring fieldAutoWirings) throws Exception { Class cls = serviceObject.getClass(); for (Field field : cls.getDeclaredFields()) { for (IFieldWiring fieldAutoWiring : fieldAutoWirings) { if (field.isAnnotationPresent(fieldAutoWiring.annotationClass())) { fieldAutoWiring.wiring(serviceObject, field); break; } } } } } 好了,開始我們的測試類:FieldWiringTest.java public class FieldWiringTest { public static void main(String args[]) throws Exception { MyAnnotationBeanProcessor processor = new MyAnnotationBeanProcessor(); MyService b = new MyService(); processor.wire(b, new DataSourceWiring()); // 注入DataSource資源 System.out.println(b.selectForObjectFromB("", null)); System.out.println(b.selectForObjectFromA("", null)); } } 執行結果: SqlMapClient[sqlMap=com/annotation/sql-map-config-B.xml,type=B] SqlMapClient[sqlMap=com/annotation/sql-map-config-A.xml,type=A] 由執行結果可以說明DataSource資源已經被我們正確的注入了。 如果想擴展的話,只需要新建一個類實現IFieldWiring介面即可。假設叫InParamWiring.java,實現了介面定義的兩個方法後,在使用的時候,只要用以下代碼便可將資源注入了: MyAnnotationBeanProcessor processor = new MyAnnotationBeanProcessor(); MyService b = new MyService(); processor.wire(b, new DataSourceWiring(), new InParamWiring()); // 注入DataSource、InParam資源. 更多Java學習技巧,盡在博洋教育。若您想了解java程序培訓價格,歡迎向我們的在線老師進行詳細了解。
Ⅲ Spring是如何實現注入的
在使用Spring的IOC功能的時候,Spring提供了集中注入方式:屬性注入,構造函數注入和工廠方法注入,更多的時候是使用的屬性注入,即set方法注入。使用set方法注入要求在寫bean的配置文件的時候,需要我們手動設置properties。諸如:
[java] view plain
<?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:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<bean id="testBean" class="com.jack.TestBean" scope="prototype"/>
<bean id="testAction" class="com.jack.TestAction" scope="prototype">
<property name="testBean" ref="testBean"/>
</bean>
</beans>
Ⅳ java spring自定義註解注入屬性注入不進去
不知道你說的「普通的java類」是什麼。
在spring里要注入的話,相應的類都要納入spring的管理,對象由spring創建,對象從spring獲取。就像你上面的BaseDaoImpl和BaseServiceImpl。
如果UserCarManager也是由spring管理的話,那同樣適用@autowired就可以注入。
看你的提問,應該是指沒有納入spring管理的類如何注入spring管理的對象,這種情況可以用srping相關的靜態方法達到目的。
比如:
WebApplicationContext webAppContext = WebApplicationContextUtils.getWebApplicationContext(getServletContext());
BaseDaoImpl baseDao = (BaseDaoImpl) BeanFactoryUtils.beanOfTypeIncludingAncestors(webAppContext, BaseDaoImpl.class);
Ⅳ 「spring中注入是什麼意思」 這里怎麼理解「注入」的意思
spring通過「控制反轉」實現了「依賴注入」。所謂的注入,我的理解是程序實現就像蓋房子
spring允許你在類(class)里搭個框架,在配置文件中註明在什麼地方用什麼材料
在運行時spring按照你的配置真正向這個架子里「注入」了水泥、鋼筋等等。
Ⅵ 如何通俗的理解java的依賴注入
假設你編寫了兩個類,一個是人(Person),一個是手機(Mobile)。
人有時候需要用手機打電話,需要用到手機的callUp方法。
傳統的寫法是這樣:
Java code
public class Person{
public boolean makeCall(long number){
Mobile mobile=new Mobile();
return mobile.callUp(number);
}
}
也就是說,類Person的makeCall方法對Mobile類具有依賴,必須手動生成一個新的實例new Mobile()才可以進行之後的工作。
依賴注入的思想是這樣,當一個類(Person)對另一個類(Mobile)有依賴時,不再該類(Person)內部對依賴的類(Moblile)進行實例化,而是之前配置一個beans.xml,告訴容器所依賴的類(Mobile),在實例化該類(Person)時,容器自動注入一個所依賴的類(Mobile)的實例。
介面:
Java code
public Interface MobileInterface{
public boolean callUp(long number);
}
Person類:
Java code
public class Person{
private MobileInterface mobileInterface;
public boolean makeCall(long number){
return this.mobileInterface.callUp(number);
}
public void setMobileInterface(MobileInterface mobileInterface){
this.mobileInterface=mobileInterface;
}
}
在xml文件中配置依賴關系
Java code
<bean id="person" class="Person">
<property name="mobileInterface">
<ref local="mobileInterface"/>
</property>
</bean>
<bean id="mobileInterface" class="Mobile"/>
這樣,Person類在實現撥打電話的時候,並不知道Mobile類的存在,它只知道調用一個介面MobileInterface,而MobileInterface的具體實現是通過Mobile類完成,並在使用時由容器自動注入,這樣大大降低了不同類間相互依賴的關系。
java依賴注入的方法:set注入,構造方法注入,介面注入。
Ⅶ spring注入
哥們,忍不住 說你兩句,你表達的比較亂,我沒看出來 這有三個問題。依我含糊的理解,我的回答是:
對於 調用有參數的構造函數在
1) bean.xml中的例如這樣配置
<bean id="str" class="java.lang.String">
<constructor-arg index="0">
<value>This is a String value</value>
</constructor-arg>
</bean>
這就相當於 new String("This is a String value");
2) 在源碼類中用@Autowired註解,例如
public class Aaa{
private String str;
@Autowired
public Aaa(String str){
this.str=str;
}
//@Autowired
public Aaa(String str, String name){
this.str=str;
}
}
@Autowired 放在哪個構造函數上, 實例化時 就調用哪個!
Ⅷ java中一個方法的方法變數(局部變數)如何用spring依賴注入啊
你把DefaultCategoryDataset 設為成員變數,spring注入後。 再在局部里引用不就行了
Ⅸ Java 求spring用@Autowired進行方法參數注入例子。
publicclassTestController{
privatefinalTestService1test1;
privatefinalTestService2test2;
privatefinalTestService3test3;
@Autowired
publicTestController(TestService1test1,TestService2test2,TestService3test3){
this.test1=test1;
this.test2=test2;
this.test3=test3;
}
}
這是構造方法的使用方式