spring注入静态对象属性时,因为虚拟机类加载问题,直接在属性上使用@Autowired 是不可以的。需要在属性对应的set方法上@Autowired,并且,set方法不能定义为static。
1.创建静态对象属性对应的类
package com.bluej.springj.service.impl; import org.springframework.stereotype.Service; import com.bluej.springj.service.LogService; @Service("logService") public class LogServiceImpl implements LogService { public void doLog() { System.out.println("LogServiceImpl.doLog"); } }
LogService类代码
2.创建spring使用的对象
1 package com.bluej.springj.service.impl; 2 3 import org.springframework.beans.factory.annotation.Autowired; 4 import org.springframework.stereotype.Service; 5 6 import com.bluej.springj.service.CheckService; 7 import com.bluej.springj.service.LogService; 8 9 @Service("checkService") 10 public class CheckServiceImpl implements CheckService { 11 12 private static LogService logService; 13 14 public boolean doCheck(Object obj) { 15 System.out.println("CheckServiceImpl.doCheck"); 16 logService.doLog(); 17 return false; 18 } 19 20 @Autowired 21 public void setLogService(LogService logService) { 22 CheckServiceImpl.logService = logService; 23 } 24 }
CheckServiceImpl 类
3.调用示例
1 package com.bluej.springj.start; 2 3 import org.springframework.context.ApplicationContext; 4 import org.springframework.context.support.ClassPathXmlApplicationContext; 5 6 import com.bluej.springj.service.CheckService; 7 8 public class Main { 9 public static void main(String[] args) { 10 ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml"); 11 CheckService checkService = applicationContext.getBean("checkService", CheckService.class); 12 checkService.doCheck(new Object()); 13 } 14 }
Main类
4.代码地址
git地址:https://git.oschina.net/blue_phantom/ssmj.git
项目名称:springj
包位置:package com.bluej.springj.start
执行测试类:Main.java
时间: 2024-09-27 16:48:49