栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Spring IoC容器与Bean管理

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Spring IoC容器与Bean管理

文章目录
  • 一、IoC控制反转
  • 二、DI依赖注入
  • 三、Spring
    • 1.spring的含义
      • 1.1狭义的Spring框架
      • 1.2广义的Spring生态体系
    • 2.传统开发方式
    • 3.Spring IoC容器
      • 3.1初体验
      • 3.2实例化Bean的三种方式
      • 3.3 从IoC容器中获取bean
      • 3.4 id与name属性相同点和区别
      • 3.5 路径表达式
      • 3.6 对象依赖注入
      • 3.7 注入集合对象
      • 3.8 查看容器内对象
      • 3.9 bean scope属性
      • 3.10 bean的生命周期
      • 3.11 四种组件类型注解
        • 1.基于注解配置IoC容器
        • 2.两类自动装配注解
        • 3.其他元数据注解
        • 4.Java config
      • 3.12 Spring Test测试模块


一、IoC控制反转


二、DI依赖注入

三、Spring 1.spring的含义

1.1狭义的Spring框架

1.2广义的Spring生态体系

2.传统开发方式

3.Spring IoC容器

3.1初体验

applicationContext.xml




    
    
        
        
        
    

    
        
        
        
    

    
        
        
        
    

    
        
        
    

    
        
        
    

    
        
        
    

public class SpringApplication {
    public static void main(String[] args) {
        ApplicationContext context = new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
        Apple sweetApple = context.getBean("sweetApple",Apple.class);
        System.out.println(sweetApple.getTitle());
        
        Child lily = context.getBean("lily", Child.class);
        lily.eat();
        
        Child andy = context.getBean("andy", Child.class);
        andy.eat();
    }
}
3.2实例化Bean的三种方式

构造方法


静态工厂


public class AppleStaticFactory {
  public static Apple createSweetApple(){
      Apple apple = new Apple();
      apple.setTitle("hfs");
      apple.setOrigin("Asia");
      apple.setColor("red");
      return apple;
  }
}

工厂实例方法


    
public class AppleFactoryInstance {
 public Apple createSweetApple(){
     Apple apple = new Apple();
     apple.setTitle("hfs");
     apple.setOrigin("Asia");
     apple.setColor("red");
     return apple;
 }
}
3.3 从IoC容器中获取bean

3.4 id与name属性相同点和区别


        
        
        

3.5 路径表达式

加载单个配置文化
加载多配置文件

3.6 对象依赖注入



3.7 注入集合对象

注入List

注入Set

注入Map

注入Properties

3.8 查看容器内对象
		//获取容器内所有beanId数组
        String[] beanNames = context.getBeanDefinitionNames();
        for(String b:beanNames){
            System.out.println(b);
            System.out.println(context.getBean(b).getClass().getName());
        }
3.9 bean scope属性



单例


多例

单例和多例对比

3.10 bean的生命周期

3.11 四种组件类型注解 1.基于注解配置IoC容器





    
    

//组件类型注解默认beanId为类目首字母小写
//beanId = userDao
@Repository
public class UserDao {
}

这些bean在容器中肯定是单例的,在Ioc容器初始化的过程中被创建

2.两类自动装配注解

@Service
public class UserService {
    //@Autowired
    //Spring IoC容器会自动通过反射技术将属性private修饰符自动改为public,直接进行复制
    //不再执行set方法
    private UserDao userDao;

    public UserDao getUserDao() {
        return userDao;
    }

    public UserService() {
        System.out.println("创建Service");
    }

    public UserService(UserDao userDao) {
        this.userDao = userDao;
    }

    @Autowired
    //如果装配注解放在set方法上,则自动按类型/名称对set方法参数进行注入
    public void setUserDao(UserDao userDao) {
        System.out.println("setUdao"+userDao);
        this.userDao = userDao;
    }
}
@Service
public class DepartmentService {
    
    @Resource(name = "userDao")
    private IUserDao userDao;
}
3.其他元数据注解

@Service
@Scope("prototype") //设置单例/多例,XML中bean scope完全相同
public class UserService {
    //@Autowired
    //Spring IoC容器会自动通过反射技术将属性private修饰符自动改为public,直接进行复制
    //不再执行set方法
    private IUserDao userDao;

    @Value("${metaData}") //读取config.properties的metaData属性值
    private String metaData;

    @PostConstruct //XML中bean init-method完全相同
    public void init(){
        System.out.println("初始化"+metaData);
    }

    public IUserDao getUserDao() {
        return userDao;
    }

    public UserService() {
        System.out.println("创建Service");
    }

    public UserService(UserDao userDao) {
        this.userDao = userDao;
    }

    @Autowired
    //如果装配注解放在set方法上,则自动按类型/名称对set方法参数进行注入
    public void setUserDao(UserDao userDao) {
        System.out.println("setUdao"+userDao);
        this.userDao = userDao;
    }
}

配置config.properties

metaData=imooc.com
connection.driver=xxxx
connection.url=xxx
connection.username=xxx

在 applicationContext.xml 中配置config.properties



    
    
    

4.Java config



config

@Configuration //当前类是一个配置类,用于替代applicationContext.xml
@ComponentScan(basePackages = "com.imooc")
public class Config {
    @Bean //Java Config利用方法创建对象,将方法返回对象放入容器,beanId=方法名
    public UserDao userDao(){
        UserDao userDao = new UserDao();
        return userDao;
    }

    @Bean
    //先按name尝试注入,name不存在则按类型注入
    public UserService userService(UserDao userDao){
        UserService userService = new UserService();
        userService.setUserDao(userDao);
        return userService;
    }

    @Bean
    public UserController userController(UserService userService){
        UserController userController = new UserController();
        userController.setUserService(userService);
        return userController;
    }

}

使用

public class SpringApplication {
    public static void main(String[] args) {

        //基于java config配置IoC容器初始化
        ApplicationContext context = new AnnotationConfigApplicationContext(Config.class);
        String[] ids = context.getBeanDefinitionNames();
        for(String s:ids){
            System.out.println(s+":"+context.getBean(s));
        }
    }
}
3.12 Spring Test测试模块


//将Junit4的执行权交由Spring Test,在测试用例执行前自动初始化IoC容器
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:applicationContext.xml"})
public class SpringTestor {
    @Resource
    private UserService userService;

    @Test
    public void testUserService(){
        userService.createUser();
    }
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/362407.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号