在Spring开发中,一个普通对象想要拿到spring当中的bean,普通的将其new实例化出来是不行的,因为不知道该bean是否依赖其他的bean,而且由Spring管理的bean直接手动实例化是会报错的(由spring管理的bean不能手动将其实例化)
所以可以写一个类专门获取applicationContext(实现ApplicationAwar接口)在Spring容器实例化时,由于该类实现了applicationAwa接口,就会将applictionContextion传回来,我们可以用静态方法将其返回出去.
@Component
public class ApplicationContextBean implements ApplicationContextAware {
public static ApplicationContext applicationContext;
@Override
public void setApplicationContext(ApplicationContext context) throws BeansException {
applicationContext=context;
}
public static ApplicationContext getApplicationContext() {
return applicationContext;
}
}
可以写一个工具类专门处理需要的需要获取哪些bean
public class BeanUtil {
private ApplicationContext applicationContext;
public BeanUtil() {
AnnotationConfigApplicationContext
context = new AnnotationConfigApplicationContext(Config.class);
this.applicationContext=ApplicationContextBean.getApplicationContext();
}
public <T> T getMyBean(Class<T> clazz) {
return applicationContext.getBean(clazz);
}
public Object getMyBean(String name) {
return applicationContext.getBean(name);
}
public <T> T getMyBean(String name, Class<T> clazz) {
return applicationContext.getBean(name, clazz);
}
}
故此想要获取一个bean只需要将工具类实例化(Spring容器也将实例化,管理的bean也将随之实例化),在调用getMyBean方法即可.
1. 泛型方法的定义
当在一个方法签名中的返回值前面声明了一个 < T > 时,该方法就被声明为一个泛型方法
。< T >表明该方法声明了一个类型参数 T,并且这个类型参数 T 只能在该方法中使用。当然,泛型方法中也可以使用泛型类中定义的泛型参数
。
public <类型参数> 返回类型 方法名(类型参数 变量名) {
(1)只有在方法签名中声明了< T >的方法才是泛型方法,仅使用了泛型类定义的类型参数的方法并不是泛型方法。
public class Test<U> { // 该方法只是使用了泛型类定义的类型参数,不是泛型方法 public void testMethod(U u){ System.out.println(u); } // <T> 真正声明了下面的方法是一个泛型方法 public <T> T testMethod1(T t){ return t; } }
(2)泛型方法中可以同时声明多个类型参数。
(3)泛型方法中也可以使用泛型类中定义的泛型参数。
(4)特别注意的是:泛型类中定义的类型参数和泛型方法中定义的类型参数是相互独立的,它们一点关系都没有。