IntelliJ IDEA 2017版 spring-boot基础补充,原理详解
2024-08-28 04:59:07
一、Spring发展史
1、Spring1.x
版本一时代主要是通过XML文件配置bean,在java和xml中不断切换,在学习java web 初期的时候经常使用
2、Spring2.x
版本二可以支持注解模式,这样大大简化开发,减少XML文件配置
注意:
IOC推荐用注解方式实现,AOP推荐用配置方式实现
2.0版本时候的问题,到底采用注解还是文本配置
最后结论最佳实践:
(1)应用的基本配置用xml,比如:数据源、资源文件等;
(2)业务开发用注解,比如:Service中注入bean等;
(2)业务开发用注解,比如:Service中注入bean等;
3、Spring3.X到Spring4.X
从版本三开始启用通过java代码配置取代XML,可以更好的理解Bean
二、Spring的java配置
版本三提出,版本四极力推荐使用。完全替代XML配置
1、最基本的两个java配置
(1)@Configuration 作用于类上,相当于一个xml配置文件;
(2)@Bean 作用于方法上,相当于xml配置中的<bean>;
2、实战演练
(1)创建Spring项目,详见http://www.cnblogs.com/liuyangfirst/p/8298588.html
(2) 创建目录,如图所示:
(3)POJO源码
package com.springboot.exersize.pojo; /**
* Created by liuya
* User: liuya
* Date: 2018/3/24
* Time: 21:35
* projectName:20180324versionone
*/
public class User { private String userName; private String passWord; private Integer age; 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 Integer getAge() {
return age;
} public void setAge(Integer age) {
this.age = age;
}
}
) Dao源码
package com.springboot.exersize.dao; import com.springboot.exersize.pojo.User; import java.util.ArrayList;
import java.util.List; /**
* Created by liuya
* User: liuya
* Date: 2018/3/24
* Time: 22:00
* projectName:20180324versionone
*/
public class UserDao { public List<User> userList() { List<User> userList = new ArrayList<>(); for (int i = 0; i < 10; i++) {
User user = new User();
user.setUserName("username_" + i);
user.setPassWord("password_" + i);
user.setAge(i + 1);
userList.add(user);
}
return userList;
}
}
(5)Service源码
package com.springboot.exersize.service; import com.springboot.exersize.dao.UserDao;
import com.springboot.exersize.pojo.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import java.util.List; /**
* Created by liuya
* User: liuya
* Date: 2018/3/24
* Time: 22:04
* projectName:20180324versionone
*/
@Service
public class UserService { @Autowired
private UserDao userDao; public List<User> userList() {
return this.userDao.userList();
} }
(6) Java配置文档
package com.springboot.exersize.config; import com.springboot.exersize.dao.UserDao;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration; /**
* Created by liuya
* User: liuya
* Date: 2018/3/24
* Time: 22:06
* projectName:20180324versionone
*/ @Configuration
@ComponentScan(basePackages = "com.springboot.exersize.service")
public class SpringConf { @Bean
public UserDao getUserDao() {
return new UserDao();
} }
(7)测试代码
package com.liuyangfirst.test; import com.liuyangfirst.conf.SpringConf;
import com.liuyangfirst.pojo.User;
import com.liuyangfirst.service.UserService;
import org.springframework.context.annotation.AnnotationConfigApplicationContext; import java.util.List; /**
* Created by liuya
* User: liuya
* Date: 2018/3/24
* Time: 22:10
* projectName:20180324versionone
*/
public class Test { public static void main(String[] args) {
// 通过Java配置来实例化Spring容器
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(SpringConf.class); // 在Spring容器中获取Bean对象
UserService userService = context.getBean(UserService.class); // 调用对象中的方法
List<User> list = userService.userList(); for (User user : list) {
System.out.println(user.getUserName() + ", " + user.getPassWord() + ", " + user.getPassWord());
} // 销毁该容器
context.destroy();
} }
(8)成功运行
(9)原理图解
最新文章
- java关键字:synchronized
- iOS Safari 上加载的最大的图片尺寸
- classpath: 和classpath*:的区别
- 深入浅出的javascript的正则表达式学习教程
- rbenv Your user account isn&#39;t allowed to install to the system Rubygems
- devexpress皮肤设置
- IEEE Floating Point Standard (IEEE754浮点数表示法标准)
- UVa699 The Falling Leaves
- Centos 下Nginx 自启动脚本
- python学习之copy模块
- linux 使用ptrace函数时找不到头文件 .h 或者找不到某个宏的解决方法
- web开发(Java&;Jquery)实现验证码
- Python学习笔记007_图形用户界面[EasyGui][Tkinter]
- <;script>;标签中的 defer 与 async区别
- socket.io emit callback调用探秘
- vs 2017 集成python
- Ajax的简单介绍与使用
- 了解java虚拟机—CMS回收器(8)
- poj 1797 一条路径中的最小边 再找出最大的
- 配置nginx
热门文章
- 2017.1.9版给信息源新增:max_len、max_db字段
- C#实现二维码生成与解码
- 必备 .NET - C# 脚本
- 框架中spring有专门的类用于处理乱码
- python中的__name__==&#39;__main__&#39;如何简单理解(一)
- urllib.parse.urldefrag(url)的解释
- 【校招面试 之 剑指offer】第9-1题 用两个栈实现一个队列
- swift中UITextView的使用
- Boost 库uuid 的使用
- struts2框架之自定义拦截器和配置