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));
}
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!