Spring配置方式

第一阶段:xml配置

    在spring 1.x时代,使用spring开发满眼都是xml配置的bean,随着项目的扩大,

我们需要把xml配置文件分放到不同的配置文件中,那时候需要频繁地在开发的类和配置文件间切换。

第二阶段:注解配置

    在spring 2.x时代,随着JDK1.5带来的注解支持,spring提供了声明bean的注解,

大大减少了配置量。这时spring圈子存在一种争论:注解配置和xml配置究竟哪个更好?我们最终的选择是应用

的基本配置用xml,业务配置用户注解。

第三阶段:Java配置

    从spring 3.x到现在,spring提供了Java配置的能力,使用Java配置更好的理解

配置的bean。spring 4.x和spring boot都推荐使用Java配置。

Java配置

Java配置通过@Configuration和@Bean来实现。

  • @Configuration声明当前类是一个配置类,相当于一个spring配置的xml文件
  • @Bean注解在方法上,声明当前方法的返回值为一个Bean。

示例

1. 编写一个功能类的Bean

public class FunctionService{

	public String sayHello(String word){
return "hello "+ word + " !";
} }

此处没有使用@Service声明为Bean

2. 使用功能类的Bean

// 1
public class UseFunctionService{
@Autowired // 2
FunctionService functionService; public void setFunctionService(FunctionService functionService){
this.functionService = functinService;
} public String SayHello(String word){
return functionService.sayHello(word);
}
}
代码解释
  1. 此处没有使用@Service声明Bean
  2. 自动注入Bean

3. 配置类

@Configuration // 1
public class JavaConfig{ @Bean // 2
public FunctionService functionService(){
return new FunctionService();
} @Bean
public UseFunctionService useFunctionService(){
UserFunctionService useFunctionService = new UseFunctionService();
useFunctionService.setFunctionService(functionService()); // 3 为UseFunctionService注入functionService
return useFunctionService;
}
}
代码解释
  1. 使用@Configuration注解表示当前类是一个配置类,这意味着这个类里可能有0个或者多个@Bean注解,此处没有使用包扫描,是因为所有的Bean都在此勒种定义。
  2. 使用@Bean注解声明当前方法FunctionService的返回值是一个Bean,Bean的名称是方法名。
  3. 注入functionService的Bean时候直接调用functionService()方法。另外一种注入的方式,直接将functionService作为参数给useFunctionService(),这也是spring容器提供的极好的功能。在spring容器中只要存在某个bean,就可以在另外的bean的声明方法的参数注入。
@Bean
public UseFunctionService useFunctioinService(FunctionService functionService){
UserFunctionService useFunctionService = new UseFunctionService();
useFunctionService.setFunctionService(functionService);
return useFunctionService;
}

4. 运行

public class Main{
public static void main(String[] args){
// 使用注解配置工厂类,指定加载的配置类
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(JavaConfig.class); UseFunctionService useFunctionService = context.getBean(UseFunctionService.class);
System.out.println(useFunctionService.SayHello("java config"));
context.close();
}
}

无论是xml配置、注解配置还是Java配置,都被称作元数据,所谓元数据即描述数据的数据。元数据本身不具备任何可执行的能力,

只能通过外界的代码来对这些元数据行进行解析后再进行一些有意义的操作。Spring容器解析这些配置元数据进行Bean初始化、配

置和管理依赖。

声明Bean的注解有:

  • @Component,没有明确的角色
  • @Service 在业务逻辑层使用
  • @Repository 在数据访问层(dao层)使用
  • @Controller 在展现层使用

注入Bean的注解,一般情况下通用:

  • @Autowired, Spring提供的注解
  • @Inject, JSR-330提供的注解
  • @Resource, JSR-250提供的主机

以上三个注解都可注解在set方法或者属性上。

Spring配置方式的更多相关文章

  1. Spring 配置方式

    1.bean的配置方式:通过全类名(反射),通过工厂方法(静态工厂方法&实例工厂方法).FactoryBean. 2.静态工厂方法:直接调用某一个类的静态方法就可以返回bean的实例. cla ...

  2. Dubbo配置方式详解

    Dubbo 是一个分布式服务框架,致力于提供高性能和透明化的 RPC 远程服务调用方案,是阿里巴巴 SOA 服务化治理方案的核心框架,每天为 2,000+ 个服务提供 3,000,000,000+ 次 ...

  3. dubbo配置方式简单介绍

    原地址:http://www.cnblogs.com/chanshuyi/p/deep_insight_dubbo_config.html 一.介绍 Dubbo 采用全Spring配置方式,透明化接入 ...

  4. dubbo的几种配置方式(转)

    昨天刚接触公司dubbo,发现公司中项目里面的spring-dubbo-privider的dubbo中<dubbo:application name=""/>和< ...

  5. [转载,感觉写的非常详细]DUBBO配置方式详解

    [转载,感觉写的非常详细]DUBBO配置方式详解 原文链接:http://www.cnblogs.com/chanshuyi/p/5144288.html DUBBO 是一个分布式服务框架,致力于提供 ...

  6. spring配置属性的两种方式

    spring配置属性有两种方式,第一种方式通过context命名空间中的property-placeholder标签 <context:property-placeholder location ...

  7. Spring学习4-面向切面(AOP)之schema配置方式

    一.通过Scheme配置实现AOP步骤(Spring AOP环境的环境与上篇博文 Spring接口方式相同)    步骤一.编写业务类: public class AspectBusiness {   ...

  8. spring事务之——spring配置事务的五种方式

    Spring配置文件中关于事务配置总是由三个部分组成,分别是DataSource.TransactionManager和代理机制这三部分,无论哪种配置方式,一般变化的只是代理机制这部分. DataSo ...

  9. Spring注解和配置方式

    Spring提供了一个org.springframework.beans.factory.FactoryBean工厂类接口,用户可以通过实现该接口定制实例化Bean的逻辑. 从Spring3.0开始, ...

随机推荐

  1. 51nod 1110 距离之和最小V3

    X轴上有N个点,每个点除了包括一个位置数据X[i],还包括一个权值W[i].点P到点P[i]的带权距离 = 实际距离 * P[i]的权值.求X轴上一点使它到这N个点的带权距离之和最小,输出这个最小的带 ...

  2. C++12.1.4 类的前向声明、不完全类型类

    只声明却没有定义的类称为—————–不完全类型,不完全类型不能定义该类型的对象,只能用于定义指向该类型的指针及引用,或者用于声明(不是定义)使用该类型作为形参类型或返回类型的函数. 在创建类的对象之前 ...

  3. RocketMQ学习笔记(5)----RocketMQ监控平台rocketmq-console-ng的搭建

    1. 下载rocketmq-console-ng 官网地址:https://github.com/apache/rocketmq-externals 拉下来之后,使用idea打开rocketmq-co ...

  4. requests 后续1

    发送带数据post请求 import requests # 发送post请求 data = { } response = requests.post(url, data=data) # 内网 需要 认 ...

  5. POJ 2311 Cutting Game(SG函数)

    题目描述 意思就是说两个人轮流剪纸片,直到有一个人剪出1*1的方格就算这个人赢了.然后给出纸片的长和宽,求先手会赢还是会输 (1<=n,m<=200) 题解 看了一眼,这不是裸的SG吗 啪 ...

  6. autosar

    AUTOSAR – RTE(1)基本概念 1. RTE概述 The Run-Time Environment (RTE) is at the heart of the AUTOSAR ECU arch ...

  7. springboot --> web 应用开发-CORS 支持

    一.Web 开发经常会遇到跨域问题,解决方案有:jsonp,iframe,CORS 等等 CORS 与 JSONP 相比 1. JSONP 只能实现 GET 请求,而 CORS 支持所有类型的 HTT ...

  8. 关于iptables允许samba的问题

    今天同事跟我说他们部门的共享不能用了,想了想,最近变更的只有iptables,于是看看是否是这个原因,发现没有允许samba的入站和出站规则,我的iptables规则默认是所有都drop的,但是不知确 ...

  9. vue-cli 打包 使用 history模式 的后端配置

    apache的配置 这是windows下的 在httpd-vhosts.conf文件中把目录指向项目index.html文件所在的位置 # Virtual Hosts # <VirtualHos ...

  10. 2015 Multi-University Training Contest 2 Friends

    Friends Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Sub ...