spring boot前传(一):spring完全注解(零配置)编程方式
2018-03-02 21:58
549 查看
前言
随着JDK 1.5带来的注解支持,Spring2.x可以使用注解对Bean进行申明和注入,大大的减少了xml配置文件,同时也大大简化了项目的开发。那么,问题来了,究竟是应该使用xml还是注解呢?
最佳实践:
1、应用的基本配置用xml,比如:数据源、资源文件等;
2、业务开发用注解,比如:Service中注入bean等;
这种方式到现在仍然比较流行,特别适合较大项目!从Spring3.x开始提供了Java注解方式,使用Java注解方式可以更好的理解你配置的Bean,现在我们就处于这个时代,并且Spring4.x和Spring boot都推荐使用java注解的方式。
一 spring4.x的java注解方式编程
Java注解是Spring4.x推荐的配置方式,可以完全替代xml配置。Spring的Java注解方式是通过 @Configuration和 @Bean 这两个注解实现的:
1、@Configuration 作用于类上,相当于一个xml配置文件;
2、@Bean 作用于方法上,相当于xml配置中的<bean>;
废话不多说了,上案例!
开发环境:spring4.3.3+jdk1.7+maven3.3.9+eclipse mars.2
项目结构图:
pom配置如下:
=====================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.wx</groupId>
<artifactId>bootpre01</artifactId>
<version>0.0.1-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>4.3.3.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>4.3.3.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.3.3.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-expression</artifactId>
<version>4.3.3.RELEASE</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</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>
<configuration>
<source>1.7</source>
<target>1.7</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
</build>
</project>实体类
===============================UserEntity.java=============================
package com.wx.entitys;
import java.io.Serializable;
public class UserEntity implements Serializable {
private static final long serialVersionUID = 1034088741557780953L;
private Integer userId;
private String userName;
private String passWord;
private String email;
public UserEntity() {
}
public UserEntity(String userName, String passWord) {
super();
this.userName = userName;
this.passWord = passWord;
}
public Integer getUserId() {
return userId;
}
public void setUserId(Integer userId) {
this.userId = userId;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassWord() {
return passWord;
}
public void setPassWord(String passWord) {
this.passWord = passWord;
}
public void setEmail(String email) {
this.email = email;
}
public String getEmail() {
return email;
}
}
dao层代码
===================UserDaoImpl.java==========================
package com.wx.dao;
import java.util.ArrayList;
import java.util.List;
import org.springframework.stereotype.Component;
import com.wx.entitys.UserEntity;
@Component("userDao")
public class UserDaoImpl implements IUserDao {
public List<UserEntity> queryUserList(){
List<UserEntity> userList = new ArrayList<UserEntity>();
// 模拟数据库的查询
for (int i = 0; i < 10; i++) {
UserEntity user = new UserEntity();
user.setUserId(100+i);
user.setUserName("麻子"+i);
user.setPassWord("123pw"+i);
user.setEmail("mazi"+i+"@126.com");
userList.add(user);
}
return userList;
}
}
业务层代码
======================UserBiz.java=============================
package com.wx.biz;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;
import com.wx.dao.IUserDao;
import com.wx.entitys.UserEntity;
@Service
public class UserBiz {
//Autowired默认根据类型进行装配,加上Qualifier注解则变成根据名称装配
@Autowired
@Qualifier("userDao")
private IUserDao userDao;
public List<UserEntity> queryUserList(){
return userDao.queryUserList();
}
}
配置类
==================SpringConfig.java=======================
package com.wx.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import com.wx.dao.IUserDao;
import com.wx.dao.UserDaoImpl;
//通过该注解来表明该类是一个Spring的配置,相当于一个传统的ApplicationContext.xml
@Configuration
//相当于配置文件里面的<context:component-scan/>标签,扫描这些包下面的类的注解
@ComponentScan(basePackages="com.wx.dao,com.wx.biz")
public class SpringConfig {
// 通过该注解来表明是一个Bean对象,相当于xml中的<bean>
//bean的id值默认是方法名userDao
/*
@Bean
public IUserDao userDao(){
return new UserDaoImpl();
}
*/
}
测试类
=============================TestConfig01.java====================
package com.wx.test;
import java.util.List;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import com.wx.biz.UserBiz;
import com.wx.config.SpringConfig;
import com.wx.entitys.UserEntity;
public class TestConfig01 {
public static void main(String[] args) {
//通过java配置来实例化spring容器
AnnotationConfigApplicationContext ctx=
new AnnotationConfigApplicationContext(SpringConfig.class);
//在spring容器中获取bean对象
//名称userBiz是注解根据类UserBiz自动生成的
UserBiz userBiz=(UserBiz)ctx.getBean("userBiz");
//或者采取下面的方式
//UserBiz userBiz=(UserBiz)ctx.getBean(UserBiz.class);
List<UserEntity> userList=userBiz.queryUserList();
for(UserEntity user:userList){
System.out.print(user.getUserId());
System.out.print("\t"+user.getUserName());
System.out.print("\t"+user.getPassWord());
System.out.println("\t"+user.getEmail());
}
//销毁容器
ctx.destroy();
}
}
运行效果
怎么样,是不是so easy,比配置方式要简单吧!
如果帮助到了您,请点个赞吧!
随着JDK 1.5带来的注解支持,Spring2.x可以使用注解对Bean进行申明和注入,大大的减少了xml配置文件,同时也大大简化了项目的开发。那么,问题来了,究竟是应该使用xml还是注解呢?
最佳实践:
1、应用的基本配置用xml,比如:数据源、资源文件等;
2、业务开发用注解,比如:Service中注入bean等;
这种方式到现在仍然比较流行,特别适合较大项目!从Spring3.x开始提供了Java注解方式,使用Java注解方式可以更好的理解你配置的Bean,现在我们就处于这个时代,并且Spring4.x和Spring boot都推荐使用java注解的方式。
一 spring4.x的java注解方式编程
Java注解是Spring4.x推荐的配置方式,可以完全替代xml配置。Spring的Java注解方式是通过 @Configuration和 @Bean 这两个注解实现的:
1、@Configuration 作用于类上,相当于一个xml配置文件;
2、@Bean 作用于方法上,相当于xml配置中的<bean>;
废话不多说了,上案例!
开发环境:spring4.3.3+jdk1.7+maven3.3.9+eclipse mars.2
项目结构图:
pom配置如下:
=====================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.wx</groupId>
<artifactId>bootpre01</artifactId>
<version>0.0.1-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>4.3.3.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>4.3.3.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.3.3.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-expression</artifactId>
<version>4.3.3.RELEASE</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</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>
<configuration>
<source>1.7</source>
<target>1.7</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
</build>
</project>实体类
===============================UserEntity.java=============================
package com.wx.entitys;
import java.io.Serializable;
public class UserEntity implements Serializable {
private static final long serialVersionUID = 1034088741557780953L;
private Integer userId;
private String userName;
private String passWord;
private String email;
public UserEntity() {
}
public UserEntity(String userName, String passWord) {
super();
this.userName = userName;
this.passWord = passWord;
}
public Integer getUserId() {
return userId;
}
public void setUserId(Integer userId) {
this.userId = userId;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassWord() {
return passWord;
}
public void setPassWord(String passWord) {
this.passWord = passWord;
}
public void setEmail(String email) {
this.email = email;
}
public String getEmail() {
return email;
}
}
dao层代码
===================UserDaoImpl.java==========================
package com.wx.dao;
import java.util.ArrayList;
import java.util.List;
import org.springframework.stereotype.Component;
import com.wx.entitys.UserEntity;
@Component("userDao")
public class UserDaoImpl implements IUserDao {
public List<UserEntity> queryUserList(){
List<UserEntity> userList = new ArrayList<UserEntity>();
// 模拟数据库的查询
for (int i = 0; i < 10; i++) {
UserEntity user = new UserEntity();
user.setUserId(100+i);
user.setUserName("麻子"+i);
user.setPassWord("123pw"+i);
user.setEmail("mazi"+i+"@126.com");
userList.add(user);
}
return userList;
}
}
业务层代码
======================UserBiz.java=============================
package com.wx.biz;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;
import com.wx.dao.IUserDao;
import com.wx.entitys.UserEntity;
@Service
public class UserBiz {
//Autowired默认根据类型进行装配,加上Qualifier注解则变成根据名称装配
@Autowired
@Qualifier("userDao")
private IUserDao userDao;
public List<UserEntity> queryUserList(){
return userDao.queryUserList();
}
}
配置类
==================SpringConfig.java=======================
package com.wx.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import com.wx.dao.IUserDao;
import com.wx.dao.UserDaoImpl;
//通过该注解来表明该类是一个Spring的配置,相当于一个传统的ApplicationContext.xml
@Configuration
//相当于配置文件里面的<context:component-scan/>标签,扫描这些包下面的类的注解
@ComponentScan(basePackages="com.wx.dao,com.wx.biz")
public class SpringConfig {
// 通过该注解来表明是一个Bean对象,相当于xml中的<bean>
//bean的id值默认是方法名userDao
/*
@Bean
public IUserDao userDao(){
return new UserDaoImpl();
}
*/
}
测试类
=============================TestConfig01.java====================
package com.wx.test;
import java.util.List;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import com.wx.biz.UserBiz;
import com.wx.config.SpringConfig;
import com.wx.entitys.UserEntity;
public class TestConfig01 {
public static void main(String[] args) {
//通过java配置来实例化spring容器
AnnotationConfigApplicationContext ctx=
new AnnotationConfigApplicationContext(SpringConfig.class);
//在spring容器中获取bean对象
//名称userBiz是注解根据类UserBiz自动生成的
UserBiz userBiz=(UserBiz)ctx.getBean("userBiz");
//或者采取下面的方式
//UserBiz userBiz=(UserBiz)ctx.getBean(UserBiz.class);
List<UserEntity> userList=userBiz.queryUserList();
for(UserEntity user:userList){
System.out.print(user.getUserId());
System.out.print("\t"+user.getUserName());
System.out.print("\t"+user.getPassWord());
System.out.println("\t"+user.getEmail());
}
//销毁容器
ctx.destroy();
}
}
运行效果
怎么样,是不是so easy,比配置方式要简单吧!
如果帮助到了您,请点个赞吧!
相关文章推荐
- spring boot框架学习学前掌握之重要注解(1)-sprng的java配置方式
- spring转springboot后,使用注解方式配置spring相关配置
- spring boot框架学习学前掌握之重要注解(1)-sprng的java配置方式
- spring之aop编程——基于注解、xml配置文件方式
- spring boot 注解方式配置多数据源与使用
- SpringBoot配置Bean的两种方式--注解以及配置文件
- spring boot框架学习学前掌握之重要注解(2)-通过java的配置方式进行配置spring
- spring boot框架学习学前掌握之重要注解(1)-java配置方式
- 基于springboot搭建dubbo框架(注解和xml配置两种方式)
- spring boot框架学习学前掌握之重要注解(2)-通过java的配置方式进行配置spring
- spring boot框架学习学前掌握之重要注解(2)-通过java的配置方式进行配置spring
- Springboot 中同时使用mybatis注解和springbean-xml配置方式
- Spring采用注解方式配置事务
- Spring Boot 核心注解与配置文件
- spring纯注解方式简单配置定时任务
- Spring Boot教程 - Spring Boot集成Mybatis(注解配置)
- springboot入门(二)--springboot常用注解及配置
- spring-boot 注解配置mybatis+druid(新手上路)
- Spring 3.0.5 MVC 基于注解ehcache.xml 配置方式
- Spring Boot常用注解(三) - 实现Java配置的注解