二、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对象

 package cn.mmzs.springboot.entity;

 /**
* @author: mmzs
* @date: 2018年6月26日
* @Description:
* springboot注解详解:http://www.cnblogs.com/mmzs/p/8874349.html
* @version V1.0
*/
public class User { private String uname; private String upassword; private Integer uage; private String email; public String getUname() {
return uname;
} public void setUname(String uname) {
this.uname = uname;
} public String getUpassword() {
return upassword;
} public void setUpassword(String upassword) {
this.upassword = upassword;
} public Integer getUage() {
return uage;
} public void setUage(Integer uage) {
this.uage = uage;
} public String getEmail() {
return email;
} public void setEmail(String email) {
this.email = email;
} }

User

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

 package cn.mmzs.springboot.dao;

 import java.util.ArrayList;
import java.util.List; import cn.mmzs.springboot.entity.User; /**
* @author: mmzs
* @date: 2018年6月26日
* @Description:
* springboot注解详解:http://www.cnblogs.com/mmzs/p/8874349.html
* @version V1.0
*/
public class UserDao { public List<User> queryUserList(){
List<User> result = new ArrayList<User>();
// 模拟数据库的查询
for (int i = 0; i < 10; i++) {
User user = new User();
user.setUname("username_" + i);
user.setUpassword("password_" + i);
user.setUage(i + 1);
user.setEmail("mmzsblog"+i+"@163.com");
result.add(user);
}
return result;
} }

UserDao

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

 package cn.mmzs.springboot.service;

 import java.util.List;

 import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import cn.mmzs.springboot.dao.UserDao;
import cn.mmzs.springboot.entity.User; /**
* @author: mmzs
* @date: 2018年6月26日
* @Description:
* springboot注解详解:http://www.cnblogs.com/mmzs/p/8874349.html
* @version V1.0
*/
@Service
public class UserService { @Autowired // 注入Spring容器中的bean对象
private UserDao userDao; public List<User> queryUserList() {
// 调用userDao中的方法进行查询
return this.userDao.queryUserList();
} }

UserService

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

 package cn.mmzs.springboot.javaconfig;

 import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration; import cn.mmzs.springboot.dao.UserDao; /**
* @author: mmzs
* @date: 2018年6月26日
* @Description:
* springboot注解详解:http://www.cnblogs.com/mmzs/p/8874349.html
* @version V1.0
*/
@Configuration //通过该注解来表明该类是一个Spring的配置,相当于一个xml文件
@ComponentScan(basePackages = "cn.mmzs.springboot") //配置扫描包
public class SpringConfig { @Bean // 通过该注解来表明是一个Bean对象,相当于xml中的<bean>
public UserDao getUserDAO(){
return new UserDao(); // 直接new对象做演示
} }

SpringConfig

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

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

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

 package cn.mmzs.springboot.main;

 import java.util.List;

 import org.springframework.context.annotation.AnnotationConfigApplicationContext;

 import cn.mmzs.springboot.entity.User;
import cn.mmzs.springboot.javaconfig.SpringConfig;
import cn.mmzs.springboot.service.UserService; /**
* @author: mmzs
* @date: 2018年6月26日
* @Description:
* springboot注解详解:http://www.cnblogs.com/mmzs/p/8874349.html
* @version V1.0
*/
public class JavaConfigMain { public static void main(String[] args) {
// 通过Java配置来实例化Spring容器
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(SpringConfig.class); // 在Spring容器中获取Bean对象
UserService userService = context.getBean(UserService.class); // 调用对象中的方法
List<User> list = userService.queryUserList();
for (User user : list) {
System.out.println("测试结果:\n"+user.getUname() + ", " + user.getUpassword() + ", "
+ user.getUage() + ", " + user.getEmail());
} // 销毁该容器
context.destroy();
} }

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的依赖关系。

SpringBoot学习(二)-->Spring的Java配置方式的更多相关文章

  1. SpringBoot学习(三)-->Spring的Java配置方式之读取外部的资源配置文件并配置数据库连接池

    三.读取外部的资源配置文件并配置数据库连接池 1.读取外部的资源配置文件 通过@PropertySource可以指定读取的配置文件,通过@Value注解获取值,具体用法: @Configuration ...

  2. SpringBoot学习(二)——Spring的Java配置方式

    Java配置是Spring4.x推荐的配置方式,可以完全替代xml配置. 一.@Configuration 和 @Bean Spring的Java配置方式是通过@Configuration和@Bean ...

  3. Spring 的java 配置方式

    Java配置是Spring4.x推荐的配置方式,可以完全替代xml配置. 1.1@Configuration 和 @Bean Spring的Java配置方式是通过 @Configuration 和 @ ...

  4. Spring的Java配置方式

    Java配置是Spring4.x推荐的配置方式,可以完全替代xml配置. 1     @Configuration 和 @Bean Spring的Java配置方式是通过 @Configuration ...

  5. Spring的Java配置方式—@Configuration和@Bean实现Java配置

    Java配置是Spring4.x推荐的配置方式,可以完全替代xml配置. 1.@Configuration 和 @BeanSpring的Java配置方式是通过 @Configuration 和 @Be ...

  6. spring的Java配置入门(Spring Boot学习笔记之一)

    spring的Java配置 1.创建maven项目 使用idea创建maven项目,这里顺便提一下,idea真的比eclipse好用,早点熟悉吧.然后就是maven是java项目管理最主流的工具,自己 ...

  7. 【Java Web开发学习】Spring MVC 开始配置

    Spring MVC 开始配置 转载:http://www.cnblogs.com/yangchongxing/p/8871370.htm 学习搭建最简单的Spring MVC框架. ======== ...

  8. SPRING SECURITY JAVA配置:Web Security

    在前一篇,我已经介绍了Spring Security Java配置,也概括的介绍了一下这个项目方方面面.在这篇文章中,我们来看一看一个简单的基于web security配置的例子.之后我们再来作更多的 ...

  9. SpringBoot学习(一)-->Spring的发展

    一.Spring的发展 1.Spring1.x 时代 在Spring1.x时代,都是通过xml文件配置bean,随着项目的不断扩大,需要将xml配置分放到不同的配置文件中,需要频繁的在java类和xm ...

随机推荐

  1. Session使用(14)

    用session统计某个网页的访问人数(因为我还不会js,所以就做了个简易版本的) 1.创建Session监听器,每创建了一个Session对象就执行监听类中·的sessionCreated方法. p ...

  2. U-Boot bootargs简析

    Linux内核启动时需要一些配置信息,如根文件系统的类型.flash分区情况.串口终端的编号.内存的使用情况等等,而由于U-Boot和Linux Kernel的镜像是独立的两个文件,所以只能两者约定好 ...

  3. Leetcode11 Container With Most Water 解题思路 (Python)

    今天开始第一天记录刷题,本人编程小白,如果有写的不对.或者能更完善的地方请个位批评指正! 准备按tag刷,第一个tag是array: 这个是array的第一道题:11. Container With ...

  4. shell丢弃信息

        1>/dev/null 2>&1 或 >/dev/null 2>&1 的含义及注意事项 > 表示重定向到哪 1表示stdout标准输出,输出到屏幕 ...

  5. 微信小程序-自定义下拉刷新

    最近给别个公司做技术支持,要实现微信小程序上拉刷新与下拉加载更多 微信给出的接口不怎么友好,最终想实现效果类似QQ手机版 ,一共3种下拉刷新状态变化,文字+图片+背景颜色 最终实现后的效果(这里提示有 ...

  6. 【npm】伙计,给我来一杯package.json!不加糖

    前言:夜深了,我熬了一锅热气腾腾的package.json,给大家端上来,希望大家喜欢 json和JS对象的区别 package.json,顾名思义,它是一个json文件,而不能写入JS对象. 所以我 ...

  7. Hadoop Partition函数应用(归档)

    一.实例描述 在这个实例里我们使用简单的数据集,里面包含多条数据,每条数据由姓名.年龄.性别和成绩组成.实例要求是按照如下规则归档用户. 1.找出年龄小于20岁中男生和女生的最大分数 2.找出20岁到 ...

  8. vue模式

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. Eclipse 配置 Tomcat 服务器

    配置Tomcat 在首先外部安装好Tomcat,然后在eclipse配置Tomcat服务器: 选择要配置的Tomcat版本: 注意:这一步如果勾选了Create a new local server ...

  10. Web前端-Vue.js必备框架(一)

    Web前端-Vue.js必备框架(一) <!DOCTYPE html> <html lang="en"> <head> <meta cha ...