使用spring的ioc容器实现对bean的管理与基本的依赖注入是再经典的应用了。基础使用不在详述。

这里主要介绍下使用注解实现零配置的spring容器。我相信你也会更喜欢使用这种方式。
Spring 3.0引入了JavaConfig,这种写法比xml文件的好处是具备类型安全检查.

1.定义一个简单的组件

package spring4;
import org.springframework.stereotype.Component;
/**
* Created by java技术.
*/ @Component
public class Compent {  
  public void show(){
     System.out.println("i am compent");
  }
}

2.定义配置信息类

package spring4;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
/**
* Created by java技术.
*/ @Configuration("name") //表示这是一个配置信息类,可以给这个配置类也起一个名称
@ComponentScan("spring4") //类似于xml中的<context:component-scan base-package="spring4"/>
public class Config {  
  @Autowired //自动注入,如果容器中有多个符合的bean时,需要进一步明确
  @Qualifier("compent") //进一步指明注入bean名称为compent的bean
  private Compent compent;
 
  @Autowired
  @Qualifier("newbean")    
  private Compent newbean;    
  @Bean //类似于xml中的<bean id="newbean" class="spring4.Compent"/>
  public Compent newbean(){        
    return new Compent();
  }    
  public void print(){
    System.out.println("i am beanname");
    ompent.show();
    newbean.show();
  }
}

3.启动spring容器

package spring4;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
/**
* Created by java技术
*/ public class Application {    
  public static void main(String[] arg){        
//初始化spring容器,由于使用的是注解,没有xml文件,所有不再使用ClasspathXmlApplicationContext
    ApplicationContext context=new AnnotationConfigApplicationContext(Config.class);
    context.getBean("name",Config.class).print(); //配置类本身也是一个spring ioc容器中的bean,所以可以获取到它
  }
}

所有使用xml配置的信息都可以通过java类的方式配置。

混合使用多种配置方法

通常,可能在一个Spring项目中同时使用自动配置和显式配置,而且,即使你更喜欢JavaConfig,也有很多场景下更适合使用XML配置。幸运的是,这些配置方法可以混合使用。
首先明确一点:对于自动配置,它从整个容器上下文中查找合适的bean,无论这个bean是来自JavaConfig还是XML配置。
在JavaConfig中解析XML配置
通过@Import注解导入其他的JavaConfig,并且支持同时导入多个配置文件;
@Configuration
@Import({Config1.class, Config2.class})
public class SystemConfig {}

通过@ImportResource注解导入XML配置文件
@Configuration
@Import(Config1.class)
@ImportResource("classpath: config.xml")
public class SystemConfig {}

在XML配置文件中应用JavaConfig
通过<import>标签引入其他的XML配置文件;
通过<bean>标签导入Java配置文件到XML配置文件,例如<bean class="SystemConfig" />

事实上,基于xml的配置非常繁琐和笨重,注解已经成为事实上的主流。spring正是也注意到了这些,所以早已推出了支持注解的方式。spring体系中的boot项目更是为快速开发应用而生,零配置,一键启动web应用。作为开发者,我们更应该关注的是业务,不需要把时间花在对一些事实上会很少变更的形式的配置上。真正需要经常变更的也经常是业务上的配置,我们也会有相应的方案应对。

文章出处:

纯注解快速使用spring IOC容器的更多相关文章

  1. Spring注解驱动开发之Ioc容器篇

    前言:现今SpringBoot.SpringCloud技术非常火热,作为Spring之上的框架,他们大量使用到了Spring的一些底层注解.原理,比如@Conditional.@Import.@Ena ...

  2. Spring IOC容器装配Bean_基于注解配置方式

    bean的实例化 1.导入jar包(必不可少的) 2.实例化bean applicationContext.xml(xml的写法) <bean id="userDao" cl ...

  3. Spring IOC 容器源码分析

    声明!非原创,本文出处 Spring 最重要的概念是 IOC 和 AOP,本篇文章其实就是要带领大家来分析下 Spring 的 IOC 容器.既然大家平时都要用到 Spring,怎么可以不好好了解 S ...

  4. Spring IOC容器源码分析

    注:本文转自https://javadoop.com/post/spring-ioc Spring 最重要的概念是 IOC 和 AOP,本篇文章其实就是要带领大家来分析下 Spring 的 IOC 容 ...

  5. 深入理解Spring IOC容器

    本文将从纯xml模式.xml和注解结合.纯注解的方式讲解Spring IOC容器的配置和相关应用. 纯XML模式 实例化Bean的三种方式: 使用无参构造函数 默认情况下,会使用反射调用无参构造函数来 ...

  6. 深入理解Spring IOC容器及扩展

    本文将从纯xml模式.xml和注解结合.纯注解的方式讲解Spring IOC容器的配置和相关应用. 纯XML模式 实例化Bean的三种方式: 使用无参构造函数 默认情况下,会使用反射调用无参构造函数来 ...

  7. 【Spring】非Spring IOC容器下获取Spring IOC上下文的环境

    前言 在Spring Web项目中,有些特殊的时候需要在非Spring IOC容器下获取Spring IOC容器的上下文环境,比如获取某个bean. 版本说明 声明POM文件,指定需引入的JAR. & ...

  8. Spring IOC容器基本原理

    2.2.1 IOC容器的概念IOC容器就是具有依赖注入功能的容器,IOC容器负责实例化.定位.配置应用程序中的对象及建立这些对象间的依赖.应用程序无需直接在代码中new相关的对象,应用程序由IOC容器 ...

  9. spring揭密学习笔记(3)-spring ioc容器:Spring的IoC容器之BeanFactory

    1. Spring的IoC容器和IoC Service Provider的关系 Spring的IoC容器和IoC Service Provider所提供的服务之间存在一定的交集,二者的关系如图4-1所 ...

随机推荐

  1. Python中BeautifulSoup中对HTML标签的提取

    一开始使用了beautifulSoup的get_text()进行字符串的提取,后来一直提取失败,并提示错误为TypeError: 'NoneType' object is not callable 返 ...

  2. jedis使用api

    Jedis 是 Redis 官方首选的 Java 客户端开发包. 工作过程总结的一个示例,贴出来,如下: package com.wujintao.redis; import java.util.Da ...

  3. [APUE]进程控制(中)

    一.wait和waitpid函数 当一个进程正常或异常终止时会向父进程发送SIGCHLD信号.对于这种信号系统默认会忽略.调用wait/waidpid的进程可能会: 阻塞(如果其子进程都还在运行); ...

  4. iOS 开发中中 textView 作为子控件点击输入文本,然后退出文本的方式

    方式1. 使用当双击输入的时候弹出键盘同时,使用手势和通知监听键盘的方法实现 代码如下: 1. 监听键盘通知 [[NSNotificationCenter defaultCenter] addObse ...

  5. Python第一天 安装 shell 文件

    Python第一天  安装  shell  文件 python里面一切都是对象 object 代码缩进:建议用四个空格来缩进,不要用tab键 安装 Linux自带python,windows需要下载m ...

  6. Spring总结 0.概述

    由于之前学了好多知识,感觉挺乱的.趁放假,想对这些知识复习归纳下.所以就有了这些随笔啦.随笔中可能会出现错误哈,万一有人看了并且发现了留言哈.勿喷,谢谢哈~先对Spring进行简要概括,以下内容有些摘 ...

  7. Extjs的GridPanel分页前后台完整代码实例

    第一次写文章啊,有些冲动.最近在公司学习Extjs,做了一个分页的小实例和大家分享. 1.首先编写paging-grid.js文件,这是我在网上参考的例子改写的,大同小异. Ext.onReady(f ...

  8. Ubuntu16 64位安装steam, 并解决无法启动的问题

    直接用crtl+shift打开终端,运行下面的命令. sudo add-apt-repository multiverse sudo apt update sudo apt install steam ...

  9. orm2

    数据库连接 var orm = require("orm"); orm.connect("mysql://username:password@host/database& ...

  10. activeX控件注册失败

    请确保该二进制存储在指定的路径中 或者调试它以检查该二进制或相关的 .dll 文件是否有问题 解决办法将程序所需的dll文件复制到 C:\Windows\SysWOW64(64位系统)目录下