如图,想问问题:
Server作为第三方jar包的类,server.start()方法所需的参数是ServerListener类的实例。ServerListener类我在项目下已创建,里面的代码逻辑可忽略。
现在问题是如果再ServerListener类上@Component后,怎么改造server.start(new ServerListener())这行代码? 也就是说怎么从外部拿到这个类的实例呢?
谢谢。
1.如果你想用@autowired,那么这个类本身也应该是在spring的管理下 的,即你的UserLogUtil也要标注为一个component(或Service),这样spring才知道要注入依赖;
2. 如果不标注为@Component的话,此时不能通过@autowired来注入依赖,只能通过ApplicationContext来取得标注为Service的类:
UserLogService service = ApplicationContext.getBean(UserLogService.class);
如果你把这个类放入到IOC容器中了,就可以使用 ApplicationContext 获取 ; 可以新建一个类 实现ApplicationContextAware接口 , 就可以拿到ApplicationContext实例了 , 然后调用他的getBean方法即可;
/**
@date 2013-5-29 下午1:25:40
*/
@Service
@Lazy(false)
public class SpringContextHolder implements ApplicationContextAware {
private static ApplicationContext applicationContext = null;
/**
/**
/**
/**
实现ApplicationContextAware接口, 注入Context到静态变量中.
*/
@Override
public void setApplicationContext(ApplicationContext applicationContext) {
SpringContextHolder.applicationContext = applicationContext;
}
}
使用注解 @Component之后 你需要配置spring进行注册(xml里面显式配置,或者配置为自动扫描),然后程序启动(初始化)完毕之后(注意程序启动顺序)再其他调用的地方可以使用 ApplicationContextAware接口(当然你要新建一个类(并自己管理这个类可以使用单例)来实现这个接口)然后通过getBean获取该bean