美文网首页
Spring 基本使用

Spring 基本使用

作者: 泛空秋慕 | 来源:发表于2018-06-18 18:36 被阅读0次

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

Spring 所有的功能设计和实现都是基于这四大原则的。

1. 控制反转&依赖注入

   我们通常所说的反转控制和依赖注入在Spring下是等同的概念,控制反转是通过依赖注入实现的。所谓依赖注入是指容器负责创建对象和维护对象之间的依赖关系,而不是通过对象本身负责自己的创建和解决自己的依赖。
  依赖注入的主要目的是为了解耦,体现了一种“组合”的概念。如果你希望你的类具备某项功能的时候,是继承自具有此功能的一个父类好?还是组合另一个具有这个功能的类好呢?当然,答案是不言而喻的,继承一个父类,那么子类将于父类耦合,组合一个类则使得耦合度大大降低。
  Spring IOC容器(ApplicationContext)负责创建Bean,并通过容器将功能类注入到你需要的Bean中 。Spring提供xm、注解、Java配置、groovy配置实现Bean的创建和注入。
  无论是xml配置、注解还是Java配置,都被称为配置元数据,所谓元数据即指的是描述数据的数据。元数据本身不具备任何可执行的能力 ,只能通过外界代码来对这些元数据行进行解析后进行一些有意义的操作。Spring容器解析这些配置元数据进行Bean的初始化、配置和依赖管理。
  声明Bean的注解:
   - @Component 组件,没有明确的角色。
   - @Service 在业务逻辑层(service)使用。
   - @Repository,在数据访问层(dao)使用。
   - @Controller 在表现层使用(MVC-->Spring MVC)。
  注入Bean的注解,一般情况下通用:
   - @Autowired ,Spring提供的注解
   - @Inject JSR-330提供的注解
   -@Resource JSR-250提供的注解

@Autowired、@Inject、@Resource 均可注解在属性或set方法上,一般习惯是将其注解在属性上,这样的优点是,代码更少、层次更清晰。

2.基本配置

  以下代码演示基于注解的Bean的初始化和依赖注入,Spring容器选用AnnotationConfigApplicationContext。

(1)编写功能能类的Bean

package com.hsun.spring.service;

import org.springframework.stereotype.Service;
/**
*①使用@Service声明当前FuncationService类是Spring所管理的一个Bean,
*其中使用@Component、*@Service、@Repository和@Controller是等效的,可根据需要选用。
*/
@Service//1
public class FuncationService {
    
    public String sayHello(String word) {
        
        return "Hello " + word + "!"; 
    }

}

(2)使用功能类的Bean

package com.hsun.spring.service;

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

@Service//使用@Service注解四横名当前类是一个Spring所管理的Bean
public class UseFuncationService {

    /**
     * 使用@Autowired将FuncationService注入到当前类中,
     * 使得UseFuncationService类具有FuncationService类的功能,此处使用JSR-330提供
     * 的@Inject注解或者是JSR-250提供的@Resource注解是等效的。
     */
    @Autowired//2
    private FuncationService funcationService;
    
    public String sayHello(String word) {
        
        return funcationService.sayHello(word);
    }
}

(3) 配置类

package com.hsun.spring.config;

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

@Configuration//1 @Configration声明当前类是一个配置类
@ComponentScan("com.hsun.spring.service")//2 
/**
 * 使用@ComponentScan,自动扫描包下所有            
 * @Service、@Repository、@Controller、@Component
 * 的类,并注册为Bean
 */
public class DiConfig {

}

(4)运行

package com.hsun.spring;

import org.springframework.context.annotation.AnnotationConfigApplicationContext;

import com.hsun.spring.config.DiConfig;
import com.hsun.spring.service.UseFuncationService;

public class App {
    
    public static void main(String[] args) {
        AnnotationConfigApplicationContext app = 
                new AnnotationConfigApplicationContext(DiConfig.class);//1
        //使用AnnotationConfigApplicationContext作为Spring的容器,接收一个配置类作为参数
        
        UseFuncationService useFuncationService = 
                app.getBean(UseFuncationService.class);//2
        //获得生命配置的UseFuncationService的Bean
        
        System.out.println(useFuncationService.sayHello("world"));
        
        app.close();
        
        
    }

}

结果如下:


以上示例pom.xml文件如下:

<project xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.hsun</groupId>
    <artifactId>spring</artifactId>
    <version>0.0.1-SNAPSHOT</version>

    <properties>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.0.7.RELEASE</version>
        </dependency>

    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven,plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.5.3</version>
                <configuration>
                    <source>${java.version}</source>
                    <target>${java.version}</target>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

源代码托管:https://github.com/fankongqiumu/spring.git

相关文章

  • 2019-12-28

    Spring Data MongoDB 的基本使用 Spring Data介绍 Spring Data: Spr...

  • 统一配置

    spring cloud学习笔记 上文 学习使用Docker下文 RabbitMQ的基本使用 由于 spring ...

  • Spring 基本使用

    Spring框架有四大原则:  1) 使用pojo进行轻量级和最小侵入式开发;  2)通过依赖注入和使用接口编程实...

  • Spring 基本使用

    1. 打开idea工具,创建普通java工程 2. 倒入spring的jar包 需要jar包的四个部分即cor...

  • Spring Cloud Stream Kafka

    Spring Cloud Stream Kafka 基本使用 RocketMQ对Spring Cloud Stre...

  • Spring-Spring、SpringMVC与SpringBo

    Spring与SpringMVC的区别 总体架构 Spring 总的来说Spring是使用基本的JavaBean代...

  • [Spring] Spring JdbcTemplate基本使用

    JdbcTemplate基本使用 01-JdbcTemplate基本使用-概述(了解) JdbcTemplate是...

  • Spring-data-mongodb -- 集成

    官网:https://spring.io/projects/spring-data-mongodb 基本使用 1、...

  • 180803-Spring定时任务高级使用篇

    Spring定时任务高级使用篇 前面一篇博文 《Spring之定时任务基本使用篇》 介绍了Spring环境下,定时...

  • Spring Boot基本使用

    Spring Boot 精要 1, 自动配置自动配置需要的bean2, 起步依赖指定所需要的功能,引入需要的包(包...

网友评论

      本文标题:Spring 基本使用

      本文链接:https://www.haomeiwen.com/subject/qkmneftx.html