⑴ java反射方法時,方法裡面的需要其他的bean怎麼注入
首先方法要攜帶參數。fun(param1,param2...);
最後調用fun方法時候,通過反射調用,後面攜帶bean實例對象 method.invoke(obj,param1,param2...)
⑵ 靜態方法中怎麼注入@autowired
在bean。xml這邊設置了註解驅動,3.0之後就是可以直接使用基於註解的自動注入,spring已經為你做了大部分工作,當然還要使用setter注入也是可以的,看個人跟應用場景
⑶ spring 普通類 怎麼注入bean
spring在普通類中注入bean實例 或注入靜態變數的bean
Spring的注入有一個問題就是普通類沒有辦法獲得Bean文件中的bean實例。這就是如果是在Web的Servlet環境中可以通過WebApplicationContextUtils,如果是普通類就不好處理了。這需
要一點設計的技巧。下面是一個靜態類使用Bean文件中實例的例子
1、如果是在配置文件中配置來注入:
public class UserinfoUtil
{
private IUserInfo userInfo;
private static UserinfoUtil info;
public void setUserInfo(IUserInfo userInfo)
{
this.userInfo = userInfo;
}
public void init()
{
info = this;
info.userInfo = this.userInfo;
}
public static int addUserLoginCnt(String phonenumber)
{
return info.userInfo.addUserLoginCnt(phonenumber);
}
}
相應的bean的配置:
相應的Bean文件的配置
<bean id="userinfoUtil" class="com.huawei.aimi.webportal.service.UserinfoUtil" init-method="init">
<property name="userInfo" ref="userInfo"/>
</bean>
2、用註解的方式注入:
public class UserinfoUtil
{
@Autowired
private IUserInfo userInfo;
private static UserinfoUtil info;
public void setUserInfo(IUserInfo userInfo)
{
this.userInfo = userInfo;
}
@PostConstruct
public void init()
{
info = this;
info.userInfo = this.userInfo;
}
public static int addUserLoginCnt(String phonenumber)
{
return info.userInfo.addUserLoginCnt(phonenumber);
}
}
⑷ 如何解決靜態變數是無法通過註解直接注入
<bean id="" class=""> <property name="屬性名"><value>01</value></property> </bean> 靜態屬性是注入不了的,你可以定義一個變數,還得寫get/set方法,用上面的方法配置,就能在程序里使用了,同樣實現了參數的可配置化。
⑸ 如何使用靜態工廠方法來創建bean的實例
使用靜態工廠方法來創建bean的實例如下:
通過調用靜態工廠方法創建 bean:
1.調用靜態工廠方法創建 bean 是將對象創建的過程封裝到靜態方法中 , 當客戶端需要對象時 , 只需要簡單地調用靜態方法 , 而不需要關心創建對象的細節。
2.要聲明通過靜態方法創建的 bean , 需要在 bean 的 class 屬性裡面指定擁有該工廠的方法的類 , 同時在 factory-method 屬性里指定工廠方法的名稱。最後 , 使用 <constructor-arg> 元素為該方法傳遞方法參數。
⑹ 怎麼向Spring的容器中注入Bean
你寫好配置文件就行了啊。
"scope就你的對象是否是單實例"
你是說DI?
以來注入?你通過配置文件就可以啊
autowrie="byName"
"byType"
默認是使用的
setter
方法進行注入的。
⑺ spring在多線程中怎麼注入bean
Java(多)線程中注入Spring的Bean
問題說明
今天在web應用中用到了Java多線程的技術來並發處理一些業務,但在執行時一直會報NullPointerException的錯誤,問題定位了一下發現是線程中的Spring bean沒有被注入,bean對象的值為null。
原因分析
web容器在啟動應用時,並沒有提前將線程中的bean注入(在線程啟動前,web容易也是無法感知的)
解決方案
方法有多種,網上也看到了不少。
1. 使用static聲明變數
http://blog.csdn.net/bjamosgavin/article/details/6125497
這個方法自己試了一下但是沒有成功。。。
2. 把線程設置為主程序的內部類
這也是一種簡單的方法,主程序在web容器載入時肯定是可以注入Spring bean的,那麼將線程的實現類放在主程序的類中便可以「共享」Spring的bean,(當然,這需要提前把線程中的需要用到的bean定義在外層的類中)。
具體操作方法,就是將生成線程的線程池定義在主程序的類中,每個線程的實現類作為內部類也定義在主程序中。這個方法自己試過,是可以的。
3. 使用靜態方法直接取的容器中的spring對象
這個方法稍微專業點,可以線程的分發與線程的實現分離出來。在每個線程中使用靜態方法直接取的容器中的spring對象。
使用靜態方法獲取容器中的spring對象可以參見
http://littie1987.iteye.com/blog/937877,
或者http://my.oschina.net/skyline520/blog/181158?p={{page}}
但一定要記住,你定義這個工具類也要配置成spring中的bean!
下面貼一下我在使用時的代碼
(1)定義工具類
public class implements ApplicationContextAware {
private static ApplicationContext context;
@Override
public void setApplicationContext(ApplicationContext context) throws BeansException {
.context = context;
}
public static Object getSpringBean(String beanName) {
notEmpty(beanName, "bean name is required");
return context==null?null:context.getBean(beanName);
}
public static String[] getBeanDefinitionNames() {
return context.getBeanDefinitionNames();
}
⑻ 介面得到bean 怎樣調用介面的靜態方法
IFruitDao ifd = (IFruitDao) context.getBean("fru");// 查找spring配置文件中的名為"fru"的id 你自己都說了啊 這里得到的Bean實例 對應的是class=".FruitImplDao2"這個類 也就是說通過spring框架已經把IFruitDao ifd實例化成了這個介面的實...
⑼ spring 怎麼調用其他類靜態方法注入bean
一般需要在static方法里調用注入進來的service,因為是靜態方法,所以必須聲明該service也必須是static的,這時候你會發現注入不進來,會報null指針,這個時候需要使用 @PostConstruct來解決。
⑽ 的實現類里想注入spring的bean要怎麼做
注入的那個地方的class是寫的實現類,並不是介面,你點的時候,點出來的有方法名啊,你可以選是哪一個,應該不沖突的,為了解耦和,最好是一個介面對應一個實現類,你可以寫兩個<bean>啊,就是兩個bean的id不一樣,你在service層的時候注入的介面類型的變數,都是一個介面類型,但是根據你注入的不通的實現類,他就不是相同的了