Spring框架 解决企业开发复杂性
https://www.bilibili.com/video/BV1Vf4y127N5?from=search&seid=6237342153625411486&spm_id_from=333.337.0.0
ioc 容器: 控制反转,不需要new对象,把创建对象过程交给Spring进行管理
aop:面向切面,动态代理,不修改源代码记性功能增强
Spring的特点:
1.方便解耦,简化开发
jdbctemplate
事务管理
spring5的新特性
https://spring.io/projects/spring-framework#learn
https://github.com/spring-projects/spring-framework
Access to Binaries
For access to artifacts or a distribution zip, see the Spring Framework Artifacts wiki page.
https://github.com/spring-projects/spring-framework/wiki/Spring-Framework-Artifacts
https://repo.spring.io/ui/
https://repo.spring.io/release/org/springframework/spring/
https://repo.spring.io/ui/native/release/org/springframework/spring/5.2.18.RELEASE
https://repo.spring.io/ui/native/release/org/springframework/spring/5.2.18.RELEASE/spring-5.2.18.RELEASE-dist.zip
idea
https://www.jetbrains.com/idea/download/#section=mac
p3 idea
file-new-project
create project from temple
spring5_demo1
~/IdeaProjects/spring5_demo1
使用spring框架需要导入spring5 jar包
三个jar包 文档 源代码
aop beans context
core container 核心部分
beans core context expression
test 测试
beans core 为ioc的核心部分
context 上下文
expression 表达式
四个包完还需要日志包
commons-logging
https://commons.apache.org/proper/commons-logging/download_logging.cgi
https://dlcdn.apache.org//commons/logging/binaries/commons-logging-1.2-bin.zip
创建文件夹lib
拷贝5个jar包
file-》project Structure-》modules-》dependencies -》+jar包
src->new package ->new class
创建xml 如果new 没有xml选项
https://blog.csdn.net/li1325169021/article/details/93158207 创建模板
ioc 控制反转,把对象和对象之间的调用过程,交给Spring进行管理
使用ioc的目的,为了降低耦合度
p6
ioc底层原理
xml解析、工厂模式、反射
a的方法调用b的方法,通过工厂c调用
耦合度太高 -》解决方法 工厂模式 -》只解耦了a和b,不可能完全解耦
通过xml 和反射 降低到最小
反射:通过得到类的字节码文件
.java -> .class 反射就是得到class文件
ioc解耦的过程
xml创建哪些文件
配置你要创建的对象
有service类和 dao类,创建工厂类
class UserFactory{
public static UserDao getDao(){
String classValue = class属性值;//xml解析
//通过反射创建对象 得到字节码文件
Class clazz = Class.ForName(classValue); //通过反射创建对象
return (UserDao)clazz.newInstance();
}
}
怎么降低的呢?
进一步降低耦合度
只需要修改配置文件即可,其他地方不需要修改
IOC(接口)
1、IOC的思想基于IOC的容器完成,IOC容器底层就是对象工厂
2、Spring提供IOC容器实现两种方式:
1)BeanFactory 基本的内部使用不提供开发人员使用 只加载
2)ApplicationContext 接口的子类,功能更强大 加载就创建对象
这种更好,因为耗时更好资源的先项目启动的时候就做了
public class TestSpring5{
public void testAdd(){
//加载
ApplictionContext context =
new ClassPathXmlApplicationContext(configLocation:"bean1.xml");
//使用
User user=context.getBean(s:"user",User.class);
System.out.pringln(user);
user.add();
}
}
p7
spring bean 管理
1、spring创建对象
2、spring注入属性
public class User{
private String userName;
public void add(){
this.userName = userName;
}
}
bean 管理
1、xml配置文件方式 使用bean标签
2、注解方式
xm配置文件:
1)id 对象标识别名
2)class 类路径
3) name 可以加符号类似于id早期框架使用
默认无参数构建方法
注入属性
DI:依赖注入
di在ioc中有什么作用,di是ioc中的一种具体实现,表示依赖注入
但是注入属性创建对象的基础之上来完成
public class Book{
private String bname;
// set方法注入
public void setBname(String bname){
this.bname = bname;
}
// 有参数构造注入
public Book(String bname){
this.bname = bname;
}
public static void main(String[] args){
Book book = new Book();
book.setBname("abc");
Book book = new Book(bname:"abc");
}
}
bean注入
<bean id="book" class="com.atguigu.spring5.Book">
<property name="bname" value="abc"></property>
</bean>
p8 有参构造注入属性
<bean id="book" class="com.atguigu.spring5.Book">
<constructor-arg name="bname" value="abc"></constructor-arg>
</bean>