问题1
注解扫描的包不在同一包下 即@Controller标注的类所在的包 和 @Autowired标注的类所在的包 不在同一包下
解决方式:
1 . 更改包名 使两个类在同一包下
2 . 在启动类上,使用注解@ComponentScan(basePackages = { "com.xxx" })
问题2
@Service
public class ProcessStarter {
@Autowired
private LinuxShellService linuxShellService; //AutoWired自动注入
private boolean linuxShellRunning;
static{
logger = LoggerFactory.getLogger(ProcessStarter.class);
}
public ProcessStarter(){
this.linuxShellRunning = true;
Runtime.getRuntime().addShutdownHook(new Thread(()-> this.shutdown()));
}
public void shutdown(){
this.linuxShellRunning = false;
}
public void start(){
new Thread(){
public void run(){
new ProcessStarter().startLinuxShell(); //此处是通过new的形式获取对象的,,,,
}
}.start();
}
public void startLinuxShell(){
while(this.linuxShellRunning){
try {
this.linuxShellService.start(); //导致Autowired的对象是null
try {
Thread.sleep(10000L);
} catch (InterruptedException e) {
ProcessStarter.logger.error(e.getMessage());
}
} catch (Exception e) {
e.printStackTrace();
ProcessStarter.logger.error(e.getMessage());
}
}
}
解决方法:
不要在代码中出现new的情况获取对象
可以通过spring的ApplicationContext获取所有的bean的初始
注解扫描的包不在同一包下 即@Controller标注的类所在的包 和 @Autowired标注的类所在的包 不在同一包下
解决方式:
1 . 更改包名 使两个类在同一包下
2 . 在启动类上,使用注解@ComponentScan(basePackages = { "com.xxx" })
问题2
@Service
public class ProcessStarter {
@Autowired
private LinuxShellService linuxShellService; //AutoWired自动注入
private boolean linuxShellRunning;
static{
logger = LoggerFactory.getLogger(ProcessStarter.class);
}
public ProcessStarter(){
this.linuxShellRunning = true;
Runtime.getRuntime().addShutdownHook(new Thread(()-> this.shutdown()));
}
public void shutdown(){
this.linuxShellRunning = false;
}
public void start(){
new Thread(){
public void run(){
new ProcessStarter().startLinuxShell(); //此处是通过new的形式获取对象的,,,,
}
}.start();
}
public void startLinuxShell(){
while(this.linuxShellRunning){
try {
this.linuxShellService.start(); //导致Autowired的对象是null
try {
Thread.sleep(10000L);
} catch (InterruptedException e) {
ProcessStarter.logger.error(e.getMessage());
}
} catch (Exception e) {
e.printStackTrace();
ProcessStarter.logger.error(e.getMessage());
}
}
}
解决方法:
不要在代码中出现new的情况获取对象
可以通过spring的ApplicationContext获取所有的bean的初始