12.使用Java Config方式实现Spring IoC
基于JavaConfig的优势
完全摆脱XML的束缚
注解配置相对分散,利用JavaConfig对注解配置集中管理
在编译时进行依赖检查,不容易出错
JavaConfig核心注解
@Configuration 描述类,说明当前类是Java Config配置类完全替代XML文件
@Bean 描述方法,方法返回对象将被loC容器管理,beanld默认为方法名
@ImportResource 描述类,加载静态文件,可使用@Value注解获取
@ComponentScan 描述类,同XML的<context:compoment-scan>标签
package com.spring.ioc.controller;
import com.spring.ioc.service.UserService;
public class UserController {
private UserService userService;
public UserService getUserService() {
return userService;
}
public void setUserService(UserService userService) {
this.userService = userService;
}
}
package com.spring.ioc.dao;
import org.springframework.stereotype.Repository;
@Repository
public class EmployeeDao {
}
package com.spring.ioc.dao;
public class UserDao {
}
package com.spring.ioc.service;
import com.spring.ioc.dao.EmployeeDao;
import com.spring.ioc.dao.UserDao;
public class UserService {
private UserDao userDao;
private EmployeeDao employeeDao;
public EmployeeDao getEmployeeDao() {
return employeeDao;
}
public void setEmployeeDao(EmployeeDao employeeDao) {
this.employeeDao = employeeDao;
}
public UserDao getUserDao() {
return userDao;
}
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
}
package com.spring.ioc;
import com.spring.ioc.controller.UserController;
import com.spring.ioc.dao.EmployeeDao;
import com.spring.ioc.dao.UserDao;
import com.spring.ioc.service.UserService;
import org.springframework.context.annotation.*;
@Configuration //当前类是一个配置类,用于替代applicationContext.xml
@ComponentScan(basePackages = "com.spring")
public class Config {
@Bean //Java Config利用方法创建对象,将方法返回对象放入容器,beanId=方法名
public UserDao userDao(){
UserDao userDao = new UserDao();
System.out.println("已创建"+userDao);
return userDao;
}
@Bean //先按name尝试注入,name不存在则按类型注入
@Primary //JavaConfig和注解方式不冲突 可以结合使用
public UserService userService(UserDao userDao, EmployeeDao employeeDao) { //利用参数实现对象的关联
UserService userService = new UserService();
System.out.println("已创建" + userService);
userService.setUserDao(userDao);
System.out.println("调用setUserDao" + userDao);
userService.setEmployeeDao(employeeDao);
return userService;
}
@Bean //<bean id="xxx" class="xxx"/>
@Scope("prototype")
public UserController userController(UserService userService){
UserController userController = new UserController();
System.out.println("已创建"+userController);
userController.setUserService(userService);
System.out.println("调用setUserService"+userService);
return userController;
}
}
package com.spring.ioc;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
public class SpringApplication {
public static void main(String[] args) {
//基于Java Config配置IoC容器的初始化
ApplicationContext context = new AnnotationConfigApplicationContext(Config.class);
System.out.println("=============================");
String[] ids = context.getBeanDefinitionNames();
for(String id : ids){
System.out.println(id + ":" + context.getBean(id));
}
}
}



浙公网安备 33010602011771号