• SpringBoot学习(二)-->Spring的Java配置方式


    二、Spring的Java配置方式

    Java配置是Spring4.x推荐的配置方式,可以完全替代xml配置。

    1、@Configuration 和 @Bean

    Spring的Java配置方式是通过 @Configuration 和 @Bean 这两个注解实现的:

    1、@Configuration 作用于类上,相当于一个xml配置文件;

    2、@Bean 作用于方法上,相当于xml配置中的<bean>;

    2、示例

    该示例演示了通过Java配置的方式进行配置Spring,并且实现了Spring IOC功能。

    工程结构图:

    1)  创建工程以及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>cn.mmzs.springboot</groupId>
        <artifactId>mmzs-springboot</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <packaging>war</packaging>
    
        <dependencies>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-webmvc</artifactId>
                <version>4.3.7.RELEASE</version>
            </dependency>
            <!-- 连接池 -->
            <dependency>
                <groupId>com.jolbox</groupId>
                <artifactId>bonecp-spring</artifactId>
                <version>0.8.0.RELEASE</version>
            </dependency>
        </dependencies>
        <build>
            <finalName>${project.artifactId}</finalName>
            <plugins>
                <!-- 资源文件拷贝插件 -->
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-resources-plugin</artifactId>
                    <configuration>
                        <encoding>UTF-8</encoding>
                    </configuration>
                </plugin>
                <!-- java编译插件 -->
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>2.3.2</version>
                    <configuration>
                        <source>1.8</source>
                        <target>1.8</target>
                        <encoding>UTF-8</encoding>
                    </configuration>
                </plugin>
            <!-- pom.xml的war报错解决方法 -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <version>2.3</version>
                <configuration>
                    <span style="white-space:pre;">
                    </span>
                    <failOnMissingWebXml>false</failOnMissingWebXml>
                </configuration>
            </plugin>
            </plugins>
            <pluginManagement>
                <plugins>
                    <!-- 配置Tomcat插件 -->
                    <plugin>
                        <groupId>org.apache.tomcat.maven</groupId>
                        <artifactId>tomcat8-maven-plugin</artifactId>
                        <version>2.2</version>
                    </plugin>
                </plugins>
            </pluginManagement>
        </build>
    </project>
    pom.xml

    2)  编写User对象

     1 package cn.mmzs.springboot.entity;
     2 
     3 /**
     4  * @author: mmzs
     5  * @date:   2018年6月26日
     6  * @Description: 
     7  * springboot注解详解:http://www.cnblogs.com/mmzs/p/8874349.html
     8  * @version V1.0
     9 */
    10 public class User {
    11 
    12     private String uname;
    13 
    14     private String upassword;
    15 
    16     private Integer uage;
    17     
    18     private String email;
    19 
    20     public String getUname() {
    21         return uname;
    22     }
    23 
    24     public void setUname(String uname) {
    25         this.uname = uname;
    26     }
    27 
    28     public String getUpassword() {
    29         return upassword;
    30     }
    31 
    32     public void setUpassword(String upassword) {
    33         this.upassword = upassword;
    34     }
    35 
    36     public Integer getUage() {
    37         return uage;
    38     }
    39 
    40     public void setUage(Integer uage) {
    41         this.uage = uage;
    42     }
    43 
    44     public String getEmail() {
    45         return email;
    46     }
    47 
    48     public void setEmail(String email) {
    49         this.email = email;
    50     }
    51 
    52 }
    User

    3)  编写UserDAO用于模拟与数据库的交互

     1 package cn.mmzs.springboot.dao;
     2 
     3 import java.util.ArrayList;
     4 import java.util.List;
     5 
     6 import cn.mmzs.springboot.entity.User;
     7 
     8 /**
     9  * @author: mmzs
    10  * @date:   2018年6月26日
    11  * @Description: 
    12  * springboot注解详解:http://www.cnblogs.com/mmzs/p/8874349.html
    13  * @version V1.0
    14 */
    15 public class UserDao {
    16     
    17     public List<User> queryUserList(){
    18         List<User> result = new ArrayList<User>();
    19         // 模拟数据库的查询
    20         for (int i = 0; i < 10; i++) {
    21             User user = new User();
    22             user.setUname("username_" + i);
    23             user.setUpassword("password_" + i);
    24             user.setUage(i + 1);
    25             user.setEmail("mmzsblog"+i+"@163.com");
    26             result.add(user);
    27         }
    28         return result;
    29     }
    30 
    31 }
    UserDao

    4)  编写UserService用于实现User数据操作业务逻辑

     1 package cn.mmzs.springboot.service;
     2 
     3 import java.util.List;
     4 
     5 import org.springframework.beans.factory.annotation.Autowired;
     6 import org.springframework.stereotype.Service;
     7 
     8 import cn.mmzs.springboot.dao.UserDao;
     9 import cn.mmzs.springboot.entity.User;
    10 
    11 /**
    12  * @author: mmzs
    13  * @date:   2018年6月26日
    14  * @Description: 
    15  * springboot注解详解:http://www.cnblogs.com/mmzs/p/8874349.html
    16  * @version V1.0
    17 */
    18 @Service
    19 public class UserService {
    20 
    21     @Autowired // 注入Spring容器中的bean对象
    22     private UserDao userDao;
    23 
    24     public List<User> queryUserList() {
    25         // 调用userDao中的方法进行查询
    26         return this.userDao.queryUserList();
    27     }
    28 
    29 }
    UserService

    5)  编写SpringConfig用于实例化Spring容器

     1 package cn.mmzs.springboot.javaconfig;
     2 
     3 import org.springframework.context.annotation.Bean;
     4 import org.springframework.context.annotation.ComponentScan;
     5 import org.springframework.context.annotation.Configuration;
     6 
     7 import cn.mmzs.springboot.dao.UserDao;
     8 
     9 /**
    10  * @author: mmzs
    11  * @date:   2018年6月26日
    12  * @Description: 
    13  * springboot注解详解:http://www.cnblogs.com/mmzs/p/8874349.html
    14  * @version V1.0
    15 */
    16 @Configuration //通过该注解来表明该类是一个Spring的配置,相当于一个xml文件
    17 @ComponentScan(basePackages = "cn.mmzs.springboot") //配置扫描包
    18 public class SpringConfig {
    19     
    20     @Bean // 通过该注解来表明是一个Bean对象,相当于xml中的<bean>
    21     public UserDao getUserDAO(){
    22         return new UserDao(); // 直接new对象做演示
    23     }
    24     
    25 }
    SpringConfig

    注:1、SpringConfig会先扫描cn.mmzs.springboot包,然后在容器内查找被@Configuration声明的类,找到后将这些类按照bean定义进行注册。

    2、方法名不建议使用getXxxx的方式,因为使用spring的java配置的时候会默认将方法名作为bean的id。

    6)  编写测试方法用于启动Spring容器

     1 package cn.mmzs.springboot.main;
     2 
     3 import java.util.List;
     4 
     5 import org.springframework.context.annotation.AnnotationConfigApplicationContext;
     6 
     7 import cn.mmzs.springboot.entity.User;
     8 import cn.mmzs.springboot.javaconfig.SpringConfig;
     9 import cn.mmzs.springboot.service.UserService;
    10 
    11 /**
    12  * @author: mmzs
    13  * @date:   2018年6月26日
    14  * @Description: 
    15  * springboot注解详解:http://www.cnblogs.com/mmzs/p/8874349.html
    16  * @version V1.0
    17 */
    18 public class JavaConfigMain {
    19 
    20     public static void main(String[] args) {
    21             // 通过Java配置来实例化Spring容器
    22             AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(SpringConfig.class);
    23             
    24             // 在Spring容器中获取Bean对象
    25             UserService userService = context.getBean(UserService.class);
    26             
    27             // 调用对象中的方法
    28             List<User> list = userService.queryUserList();
    29             for (User user : list) {
    30                 System.out.println("测试结果:
    "+user.getUname() + ", " + user.getUpassword() + ", "
    31                                     + user.getUage() + ", " + user.getEmail());
    32             }
    33             
    34             // 销毁该容器
    35             context.destroy();
    36         }
    37 
    38     }
    JavaConfigMain

    7)  测试效果

    测试结果:
    username_0, password_0, 1, mmzsblog0@163.com
    测试结果:
    username_1, password_1, 2, mmzsblog1@163.com
    测试结果:
    username_2, password_2, 3, mmzsblog2@163.com
    测试结果:
    username_3, password_3, 4, mmzsblog3@163.com
    测试结果:
    username_4, password_4, 5, mmzsblog4@163.com
    测试结果:
    username_5, password_5, 6, mmzsblog5@163.com
    测试结果:
    username_6, password_6, 7, mmzsblog6@163.com
    测试结果:
    username_7, password_7, 8, mmzsblog7@163.com
    测试结果:
    username_8, password_8, 9, mmzsblog8@163.com
    测试结果:
    username_9, password_9, 10, mmzsblog9@163.com

    8)  小结

    从以上的示例中可以看出,使用Java代码就完美的替代xml配置文件,并且结构更加的清晰。

    Spring对Java配置的支持是由@Configuration注解和@Bean注解来实现的。

    由@Bean注解的 方法将会实例化、配置和初始化一个 新对象,这个对象将由Spring的IoC容器来管理。@Bean声明所起到的作用与<bean/> 元素类似。

    被 @Configuration所注解的类则表示这个类的主要目的是作为bean定义的资源。被@Configuration声明的类可以通过在同一个类的 内部调用@bean方法来设置嵌入bean的依赖关系。

  • 相关阅读:
    P1342 请柬
    P1186 玛丽卡
    Scala 中下划线的用法
    IDEA2017 maven Spark HelloWorld项目(本地断点调试)
    Spark内存管理详解
    Spark基础知识
    scala基本语法
    分布式锁的一点理解
    Redis并发问题
    redis集群原理
  • 原文地址:https://www.cnblogs.com/mmzs/p/9229691.html
Copyright © 2020-2023  润新知