文章目录
- Spring学习笔记
- 前言
- 1.Spring是什么
- 1.1简介:
- 1.2优点
- 1.3组成
- 1.4拓展
- 2.IOC理论推导
- 3.helloSpring
- 4.IOC创建对象的方式
- 5.Spring配置
- 5.1 别名
- 5.2 bean配置
- 5.3 import
- 6.依赖注入
- 6.1 构造器注入
- 6.2 set方式注入(重点)
- 6.3 拓展方式注入
- 6.4 bean的作用域
前言
本内容为本人在哔站学习由notepad++实时记录,没有经过idea编译,直接又贴入本博客以防止丢失,如有错误之处,还望指正,谢谢大家
1.Spring是什么 1.1简介:- spring:春天------> 给软件行业带来了春天
- 2002年:首次推出Spring框架的雏形,interface21框架
- Spring宽假即以interface21为基础,经过重新设计,并不断丰富其内涵,2004年发布1.0正式版本。
- Spring理念:是现有技术更加容易使用,本身是一个大杂烩,整合了现有的技术框架。
- Rod Johnson
- SSH :Struct2 Spring Hibernate
- SSM :SpringMVC Spring Mybatis
- Spring是一个免费的开源的框架(容器)
- Spring是一个轻量级的 非入侵式的框架
- 控制反转IOC 面向切面编程AOP
- 支持事务的处理,对整合的支持
== 总结:Spring就是一个轻量级的控制反转IOC 和面向切面AOP的框架
在Spring的官网有这个介绍:现代化的Java开发,就是基于Sping的开发
- Spring Boot
- 一个快速开发的脚手架
- 计划于SpringBoot可以快速开发单个微服务
- 约定大于配置
- Spring Cloud
- SpingCloud是基于SpringBoot实现的
因为现在大多数公司在使用SpringBoot进行快速开发,学习SpringBoot的前提,需要完全掌握Spring及SpringMVC 承上启下的作用。
- SpingCloud是基于SpringBoot实现的
弊端:发展了太久之后,违背了原来的设计理念,配置十分繁琐,配置地狱。
2.IOC理论推导1.UserDao接口
2.UserDaoImpl实现类
3.UserService业务接口
4.UserService业务实现类
导依赖包 spring-webmvc
public interface UserDao{
void getUser();
}
public class UserDaoImpl implements UserDao{
public void void getUser(){
System.out.println("默认获取用户的数据");
}
}
public interface UserService{
void getUser();
}
public class UserServiceImpl implements UserService{
//private UserDao userDao = new UesrDaoImpl(); 本来是写死的,如果用户需求变了 ,此业务层的UserDaoImpl()也需要修改,为相应的业务实现方法,但是用了下面的set注入之后,就不需要在业层修改代码了,直接在Test类的用户userService调用那传入UserDaoImpl()业务,这个UserDaoImpl()业务相当于参数传给set,然后给了ServiceImpl层中的private UserDao userDao了,而不是一开始直接在此处new,UserDaoImpl() 变了,ServiceImpl层就得变,用set就不需要了,相当于Service代码不需要修改了
- 本质就是把要在因为需求而导致修改ServiceImpl代码工作转移到去Test中具体实现时传入相应的业务就行,不需要修改Service了。
private UserDao userDao;
//利用set进行动态实现值的注入
public void setUserDao(UserDao userDao){
this.userDao = userDao;
}
public void getUser(){
userDao.getUser();
}
}
public class MyTest{
public static void main(String[] args){
//用户实际调用的是业务层,dao层他们不需要接触
//UserService userService = new UserServiceImpl();
userService.setUserDao(new UserDaoXXXServerImpl());
userService.getUser();
}
}
在之前的业务中,用户的需求可能会影响原来的代码,我们需要根据需求去修改原代码,如果程序的代码量十分大,修改的一次的成本代价非常昂贵。
我们通过使用Set接口去实现,发生了革命性的变化。
private UserDao userDao;
//利用set进行动态实现值的注入
public void setUserDao(UserDao userDao){
this.userDao = userDao;
}
之前,程序是主动创建对象,控制权在程序员手上
使用了 set注入后,程序不再具有主动性,而是变成了被动的接受对象。
这种思想,从本质上解决了问题,我们程序员就不用再去管理对象的创建了。系统的耦合性大大降低,可以专注在业务的实现上,这是IOC的原型。
3.helloSpringpackage com.kuang.pojo;
public class User {
private String name;
// public User() {
// System.out.println("User的无参构造");
// }
public User(String name){
this.name= name;
System.out.println("User的有参构造");
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void show(){
System.out.println("name="+name);
}
}
4.IOC创建对象的方式
1.使用无参构造方式创建
2.假设我们要是由有参构造方式创建。
package com.kuang.pojo;
public class UserTest {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
User user = (User) context.getBean("user");
System.out.println(user);
user.show();
}
}
beans.xml文件中的配置
1.默认调用无参
2.有参调用方式一:通过下标赋值
3.有参调用方式二:通过类型,不建议使用
4。有参调用方式二:通过参数名创建
总结,在配置文件加载的时候,容器中管理的对象就已经初始化了。
5.Spring配置 5.1 别名如果添加了别名,我们即可通过使用别名获取到这个对象。
//配置文件中5.2 bean配置//测试类中 User user = (User) context.getBean("user"); User userAlias = (User) context.getBean("userAlias");
id:bean的唯一标识符,也就是相当于我们学的对象名
class:bean对象对应的全限定名 包名+类型
name:也是别名,而且name可以取多个别名
5.3 importUser u2 = (User) context.getBean("u2"); User user3 = (User) context.getBean("user3");
import,一般用于团队开发使用,它可以将多个配置文件,导入合并为一个
假设,现在项目中有多个人开发,这三个人负责不同类的开发,不同的类型需要注册在不同的bean中,我们可以利用import将所有人的beans.xml合并为一个总的
- 张三
- 李四
- 王五
- applicationContext.xml
使用的时候,直接使用总的配置就可以了
6.依赖注入 6.1 构造器注入前面已经学过
6.2 set方式注入(重点)-
依赖注入:Set注入
- 依赖:bean对象的创建依赖于容器
- 注入:bean对象中的所有属性,由容器来注入
【环境搭建】
1.复杂类型
public class Address {
private String address;
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}
2.真实测试对象
public class Student {
private String name;
private Address address;
private String[] books;
private List hobbys;
private Map card;
private Set games;
private String wife;
private Properties into;
}
3.beans.xml
4.测试类
public class MyTest {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
Student student = (Student) context.getBean("student");
System.out.println(student.getName());
}
}
5.完善注册信息
红楼梦
西游记
三国演义
水浒传
听歌
敲代码
看电影
LOL
COC
HPH
2050511111
男
法外狂徒
6.3 拓展方式注入
官方文档
使用
测试
@Test
public void test2(){
ApplicationContext context = new ClassPathXmlApplicationContext("userbeans.xml");
User user = (User) context.getBean("user2");
System.out.println(user.toString());
}
注意点: p命名和c命名空间不能直接使用,需要导入xml约束
xmlns:p="http://www.springframework.org/schema/p"
xmlns:c="http://www.springframework.org/schema/c"
6.4 bean的作用域
1.单例模式(Spring默认机制)
2.原型模式:每次从容器中get的时候,都会产生一个新对象
3.其余的request,session,application这些之只能在web开发中使用到。



