【Spring】Spring基础配置-依赖注入

转载请注明出处:http://blog.csdn.net/qq_26525215

本文源自大学之旅_谙忆的博客

Spring框架本身有四大原则:
1、使用POJO进行轻量级和最小侵入式开发
2、通过依赖注入和基于接口编程实现松耦合
3、通过AOP和默认习惯进行声明式编程
4、使用AOP和模板减少模式化代码

在Spring环境中,控制翻转(IoC)-Inversion of Control和依赖注入(DI)-dependency injection是等同的概念。

控制翻转是通过依赖注入实现的。所谓依赖注入指的是容器负责创建对象和维护对象间的依赖关系,而不是通过对象本身负责自己的创建和解决自己的依赖。

依赖注入的主要目的是为了解耦,体现了一种”组合”的理念。

可以这样理解,当我们希望某个类具备某项功能时,可以选择继承一个具有此功能的类,也可以选择组合另外一个具有此功能的类。那么显然,我们选择组合。因为组合另外一个类会使得耦合度大大降低。

组合:组合关系就是整体与部分的关系,部分属于整体,整体不存在,部分一定不存在,然而部分不存在整体是可以存在的,说的更明确一些就是部分必须创生于整体创生之后,而销毁于整体销毁之前。部分在这个生命期内可以被其它对象关联甚至聚合,但有一点必须注意,一旦部分所属于的整体销毁了,那么与之关联的对象中的引用就会成为空引用,这一点可以利用程序来保障。

Spring IoC容器(ApplicationContext)负责创建Bean,并通过容器将功能类Bean注入到你需要的Bean中。
Spring提供使用xml,注解,Java配置,groovy配置实现Bean的创建和注入。
这些配置方式,都被称为配置元数据。
元数据:即描述数据的数据。元数据本身不具备任何可执行的能力,只能通过外界代码来对这些元数据行解析后进行一些有意义操作。
Spring容器解析这些配置元数据进行Bean初始化、配置和管理依赖。

声明Bean的注解
@Component组件,没有明确的角色。
@Service在业务逻辑层(service层)使用。
@Repository在数据访问层(dao层)使用。
@Controller在展现层(MVC)

注入Bean的注解,一般情况下通用
@Autowired:Spring提供的注解。
@Inject:JSR-330提供的注解。
@Resource:JSR-250提供的注解。
@Autowired,@Inject,@Resource都可注解在set方法上或者属性上。

演示实例:
演示基于注解的Bean的初始化和依赖注入。

首先需要先安装好Maven,搭建好Spring,
我在这篇博客中有介绍:
http://blog.csdn.net/qq_26525215/article/details/53010442

编写功能类Bean:

package cn.hncu.p1_3_1;

import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;

/**
 * Created with IntelliJ IDEA.
 * User: 陈浩翔.
 * Date: 2016/11/3.
 * Time: 上午 9:03.
 */
@Service
//使用@Service注解声明当前FunctionService类是Spring管理的一个Bean。其中,使用@Component,@Service,@Repository和
//@Controller是等效的。
public class FunctionService {
    public String sayHello(String word){
        return "Hello "+word +" !";
    }
}

使用功能类Bean:

package cn.hncu.p1_3_1;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;

/**
 * Created with IntelliJ IDEA.
 * User: 陈浩翔.
 * Date: 2016/11/3.
 * Time: 上午 9:04.
 */
@Service
//使用@Service注解声明当前UseFunctionService类是Spring管理的一个Bean
public class UseFunctionService {
    @Autowired
    //使用@Autowired将FunctionService的尸体Bean注入到UseFunctionService中,
    //让UseFunctionService具备FunctionService的功能,此处使用@Inject或者@Resource注解是等效的。
    FunctionService functionService;
    public String sayHello(String word){
        return functionService.sayHello(word);
    }
}

配置类:

package cn.hncu.p1_3_1;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

/**
 * Created with IntelliJ IDEA.
 * User: 陈浩翔.
 * Date: 2016/11/3.
 * Time: 上午 9:08.
 */
@Configuration
//@Configuration声明当前类是配置类。
@ComponentScan("cn.hncu.p1_3_1")
//使用@ComponentScan,自动扫描包名下所有使用@Service,@Component,@Repository和@Controller的类,并注册为Bean
public class DiConfig {
}

运行:

package cn.hncu.p1_3_1;

import org.springframework.context.annotation.AnnotationConfigApplicationContext;

/**
 * Created with IntelliJ IDEA.
 * User: 陈浩翔.
 * Date: 2016/11/3.
 * Time: 上午 9:09.
 */
public class Main {
    public static void main(String[] args) {
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(DiConfig.class);
        //使用AnnotationConfigApplicationContext作为Spring容器,接受输入一个配置类作为参数
        UseFunctionService useFunctionService = context.getBean(UseFunctionService.class);
        //获得声明配置的UseFunctionService的Bean
        System.out.println(useFunctionService.sayHello("张三"));
        context.close();
}
}

输出结果:

项目链接—具体到包:
https://github.com/chenhaoxiang/Java/tree/master/springBoot/src/main/java/cn/hncu/p1_3_1

本文章由[谙忆]编写, 所有权利保留。

转载请注明出处:http://blog.csdn.net/qq_26525215

本文源自大学之旅_谙忆的博客

时间: 2024-08-01 16:38:06

【Spring】Spring基础配置-依赖注入的相关文章

pring配置+依赖注入-Ehcache的Spring配置依赖注入问题

问题描述 Ehcache的Spring配置依赖注入问题 Spring在依赖注入配置时,注入的对象的类型需要同接收的参数类型相同才能注入成功的. 但是在Ehcache的注入时,我发现类型不匹配,却能注入成功. 小弟愚昧,还请多多指教.具体配置如下: Spring的bean.xml配置如下: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframew

Spring中管理Bean依赖注入之后和Bean销毁之前的行为

    对于Singleton作用域的Bean,Spring容器将会跟踪它们的生命周期,容器知道何时实例化结束.何时销毁.Spring可以管理Bean在实例化结束之后和Bean销毁之前的行为. Bean依赖关系注入之后的行为:     Spring提供了两种方式在Bean全部属性设置成功后执行特定的行为: 在Spring配置文件中使用init-method属性:这个属性指定某个方法在Bean全部依赖关系设置结束后自动执行.这个方法写在Bean里面.使用这种方法不需要将代码与Spring耦合在一起

Spring进阶之路(1)-Spring核心机制:依赖注入/控制反转

原文地址:http://blog.csdn.net/wangyang1354/article/details/50757098 我们经常会遇到这样一种情景,就是在我们开发项目的时候经常会在一个类中调用其他的类中的方法,来完成我们期望的任务,大部分的情况下往往会采用在当前需要的这个类里面new一个实例出来,然后调用他的方法,那么这样的话会有个问题,就是有一天我想改变下这个类,改为其他的名称,那么这时候必须要做的是同时去调用方的类文件中改变这个改变的类的名称.这样的情况是因为代码的耦合带来了后期维护

Spring boot将配置属性注入到bean 专题

@ConfigurationProperties和@value都是将外部属性注入到对象 @ConfigurationProperties很方便使用. 比用@value注解好吗? 在特定的方案中是的,这只是一个选择问题 @EnableConfigurationProperties //开启属性注入,有此注解就可以通过@autowired注入, 是配合@ConfigurationProperties使用的.如果没有@EnableConfigurationProperties,则使用@Configur

spring学习笔记(4)依赖注入详解

常用的注入方式有四种: 1. 属性注入 2. 构造方法注入 3. 工厂方法注入 4. 注解注入 下面先定义我们后面用到的POJO类: package test; public class User { private String name; private String gender; public String getName() { return name; } public void setName(String name) { this.name = name; } public St

《Spring技术内幕》——2.4节IoC容器的依赖注入

2.4 IoC容器的依赖注入 上面对IoC容器的初始化过程进行了详细的分析,这个初始化过程完成的主要工作是在IoC容器中建立BeanDefinition数据映射.在此过程中并没有看到IoC容器对Bean依赖关系进行注入,接下来分析一下IoC容器是怎样对Bean的依赖关系进行注入的. 假设当前IoC容器已经载入了用户定义的Bean信息,开始分析依赖注入的原理.首先,注意到依赖注入的过程是用户第一次向IoC容器索要Bean时触发的,当然也有例外,也就是我们可以在BeanDefinition信息中通过

Java Spring各种依赖注入注解的区别

Spring对于Bean的依赖注入,支持多种注解方式: @Resource  javax.annotation  JSR250 (Common Annotations for Java)    @Inject  javax.inject  JSR330 (Dependency Injection for Java)    @Autowired  org.springframework.bean.factory  Spring  直观上看起来,@Autowired是Spring提供的注解,其他几个

【SSH系列】深入浅出spring IOC中三种依赖注入方式

spring的核心思想是IOC和AOP,IOC-控制反转,是一个重要的面向对象编程的法则来消减计算机程序的耦合问题,控制反转一般分为两种类型,依赖注入和依赖查找,依赖什么?为什么需要依赖?注入什么?控制什么?依赖注入和控制反转是一样的概念吗?接触新的知识,小编的脑袋中全是大大的问号,不过没有关系,今天这篇博文,小编主要来简单的介绍一下在spring IOC中依赖注入的方法. 依赖注入和控制反转,目的是为了使类与类之间解耦合,提高系统的可扩展性和可维护性.我们可以从以下几个方面理解: a.参与者都

spring中bean配置和bean注入

1 bean与spring容器的关系 Bean配置信息定义了Bean的实现及依赖关系,Spring容器根据各种形式的Bean配置信息在容器内部建立Bean定义注册表,然后根据注册表加载.实例化Bean,并建立Bean和Bean的依赖关系,最后将这些准备就绪的Bean放到Bean缓存池中,以供外层的应用程序进行调用. 1 bean配置 bean配置有三种方法: 基于xml配置Bean 使用注解定义Bean 基于java类提供Bean定义信息 1.1 基于xml配置Bean  对于基于XML的配置,