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

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

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("测试结果:\n"+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, [email protected].com
测试结果:
username_1, password_1, 2, [email protected].com
测试结果:
username_2, password_2, 3, [email protected].com
测试结果:
username_3, password_3, 4, [email protected].com
测试结果:
username_4, password_4, 5, [email protected].com
测试结果:
username_5, password_5, 6, [email protected].com
测试结果:
username_6, password_6, 7, [email protected].com
测试结果:
username_7, password_7, 8, [email protected].com
测试结果:
username_8, password_8, 9, [email protected].com
测试结果:
username_9, password_9, 10, [email protected]

8)  小结

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

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

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

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

原文地址:https://www.cnblogs.com/mmzs/p/9229691.html

时间: 2024-10-26 05:22:32

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功能. 2.1 创建工程以

spring的Java配置入门(Spring Boot学习之一)

spring的Java配置 1.创建maven项目 使用idea创建maven项目,这里顺便提一下,idea真的比eclipse好用,早点熟悉吧.然后就是maven是java项目管理最主流的工具,自己先配置一个试试,很好上手. 2.导入依赖 编辑pom文件 1.首先配置一下jdk版本和编码,两种方式,按道理任意一种都可以,出问题的话两种都加上吧,如下 <build>        <finalName>spring-learn</finalName>        &l

Spring AOP 不同配置方式产生的冲突问题

Spring AOP的原理是 JDK 动态代理和CGLIB字节码增强技术,前者需要被代理类实现相应接口,也只有接口中的方法可以被JDK动态代理技术所处理:后者实际上是生成一个子类,来覆盖被代理类,那么父类的final方法就不能代理,因为父类的final方法不能被子类所覆盖.一般而言Spring默认优先使用JDK动态代理技术,只有在被代理类没有实现接口时,才会选择使用CGLIB技术来实现AOP. 但是也提供了配置参数来强制选择使用 CGLIB 技术,如下: <aop:config proxy-ta

Java配置方式读取外部的资源配置文件

通过@PropertySource可以指定读取的配置文件,通过@Value注解获取值,具体用法: package cn.qlq; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.

SpringBoot学习(一)-Spring的发展

一.Spring的发展 1.Spring1.x 时代 在Spring1.x时代,都是通过xml文件配置bean,随着项目的不断扩大,需要将xml配置分放到不同的配置文件中,需要频繁的在java类和xml配置文件中切换. 2.Spring2.x时代 随着JDK 1.5带来的注解支持,Spring2.x可以使用注解对Bean进行申明和注入,大大的减少了xml配置文件,同时也大大简化了项目的开发. 那么,问题来了,究竟是应该使用xml还是注解呢? 最佳实践:(IoC推荐注解:AOP推荐配置) 1. 

Spring有哪些配置方式

1.XML 配置文件. Bean 所需的依赖项和服务在 XML 格式的配置文件中指定.这些配置文件通常包含许多 bean 定义和特定于应用程序的配置选项.它们通常以 bean 标签开头.例如: <bean id="studentBean" class="org.edureka.firstSpring.StudentBean"> <property name="name" value="Edureka">

常用的两种spring、mybatis 配置方式

在之前的文章中总结了三种方式,但是有两种是注解sql的,这种方式比较混乱所以大家不怎么使用,下面总结一下常用的两种总结方式: 一. 动态代理实现 不用写dao的实现类 这种方式比较简单,不用实现dao层,只需要定义接口就可以了,这里只是为了记录配置文件所以程序写的很简单: 1.整体结构图: 2.三个配置文件以及一个映射文件 (1).程序入口以及前端控制器配置 web.xml <?xml version="1.0" encoding="UTF-8"?> &

SpringBoot学习--04SpringBoot整合Mybatis(上)(配置mybatis generator,PageHelper)

陆陆续续又忙了几天,继续写. 本篇仿照着优秀的文章的书写,加上自己的理解和踩过的坑,原文地址:https://www.jianshu.com/p/5cd772c07041?utm_campaign=haruki&utm_content=note&utm_medium=reader_share&utm_source=weixin 环境/版本一览: 开发工具:eclipse springboot: 2.0.1.RELEASE jdk:1.8.0_40 maven:3.3.9 额外功能:

Spring MVC Controller配置方式

在SpringMVC中,对于Controller的配置方式有很多种,如下做简单总结 第一种 URL对应Bean 如果要使用此类配置方式,需要在XML中做如下样式配置 <!-- 表示将请求的URL和Bean名字映射-->   <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>   <bean name="/hello.do" c