您的位置:首页 > 编程语言 > Java开发

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,比配置方式要简单吧!

如果帮助到了您,请点个赞吧!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: