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;
    }
}
UserController
复制代码
复制代码
package com.spring.ioc.dao;

import org.springframework.stereotype.Repository;

@Repository
public class EmployeeDao {
}
EmployeeDao
复制代码
复制代码
package com.spring.ioc.dao;

public class UserDao {
}
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;
    }
}
UserService
复制代码
复制代码
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));
        }
    }
}
复制代码

 

 

posted @   南风知君  阅读(78)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
点击右上角即可分享
微信分享提示