⑴ 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层的时候注入的接口类型的变量,都是一个接口类型,但是根据你注入的不通的实现类,他就不是相同的了