如何解决Spring 中基于构造函数的依赖注入
我有这门课:
<div id="htmlelement"></div>
在我的 context.xml 上:
@Service
public class DogUserService {
private final ManagerService managerService;
...
}
<bean id="managerService"
class="com.dogs.impl.services.ManagerService" />
解决方法
您需要使用@Bean 注解向WebApplicationContext 提供bean。我在 @Configuration bean 中从 context.xml 创建了 managerService bean,并使用 @Bean 方法使 bean 在 webApplicationContext 中可用。这个将 managerService 作为自动装配的 UserService 类具有此配置 bean 的 @ConditionalOnBean 属性。
以下是我的实现方式。
应用类
@SpringBootApplication public class DemoApplication
{
public static void main(String[] args)
{
SpringApplication.run(DemoApplication.class,args);
}
}
用户服务
@Service
@ConditionalOnBean({EnableConfiguration.class})
public class UserService
{
@Autowired
private ManagerService managerService;
public String run() {
System.out.println("Going to Run from manager Service");
return managerService.run();
}
}
启用配置
@Configuration
public class EnableConfiguration implements InitializingBean
{
ManagerService managerService;
@Bean
public ManagerService mngrService() {
return managerService;
}
@Override public void afterPropertiesSet() throws Exception
{
ApplicationContext ctx = new ClassPathXmlApplicationContext( "context.xml" );
managerService = (ManagerService) ctx.getBean("managerService");
System.out.println("manager bean:" + managerService.toString());
mngrService();
}
}
ManagerService
public class ManagerService
{
private int a;
private int b;
public ManagerService(int a,int b) {
this.a = a;
this.b = b;
}
public String run() {
return this.toString();
}
@Override public String toString()
{
return "ManagerService{" + "a=" + a + ",b=" + b + '}';
}
}
服务控制器
@RestController
public class ServiceController
{
@Autowired
private UserService userService;
@GetMapping("/get")
public String test() {
return userService.run();
}
}
context.xml
<bean id="managerService" class="com.example.demo.ManagerService">
<constructor-arg index="0" value="2"/>
<constructor-arg index="1" value="5"/>
</bean>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。