Spring
Spring的优点
- Spring是一个开源的免费的框架(即容器)!
- Spring是一个轻量级的、非入侵式的框架!
- 控制反转(IOC),面向切面编程(AOP)!
- 支持事务的处理,对框架整合的支持!
结论:Spring就是一个轻量级的控制反转(IOC)和面向切面编程(AOP)的框架!
根据下面的步骤进入帮助文档
页面网址:https://docs.spring.io/spring/docs/5.2.3.RELEASE/javadoc-api/
IOC本质
控制反转IOC(Inversion of Controller),是一种设计思想,DI(依赖注入)是实现IOC的一种方法,也有人认为DI知识IOC的另一种说法,没有IOC的程序中,我们使用面向对象编程,对象的创建于对象间的依赖关系完全硬编码在程序中,对象的创建有程序自己控制,控制反转后将对象的创建转移给第三方,个人认为所谓的控制反转就是:获得依赖对象的方式反转了。
控制反转是一种通过描述(XML或注解)并通过第三方去生产或获取特定对象的方式吗。在Spring中实现控制反转的是IOC容器,其实现方式是依赖注入(Dependency Injection,DI)。
编写第一个HelloSpring程序
1、导入Spring相关jar包
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.1.9.RELEASE</version>
</dependency>
导入spring-webmvc后idea会自动导入其他的相关的依赖
也可以手动导入!
2、编写一个Hello实体类
package com.star.pojo;
public class Hello {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void show(){
System.out.println("Hello"+name);
}
}
3、编写配置文件(参考文档)
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd">
<!--bean就是java对象 , 由Spring创建和管理
id:类对应对象的名字
class:对应的类(写包名)
property:字段标签
name:属性名
value:属性对应的值
-->
<bean id="hello" class="com.star.pojo.Hello">
<property name="name" value="Spring"/>
</bean>
</beans>
4、接下里就可以进行测试了
import com.star.pojo.Hello;
import org.junit.Test;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class MyTest {
@Test
public void helloTest(){
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");//对应的配置文件
Hello hello = (Hello) context.getBean("hello");//调用getBean方法获得该类对象,参数就是配置文件里面的设置的类的id
hello.show();//调用方法完成测试
}
}
测试结果:
可以看到这相当于下面的代码
Hello hello = new Hello();
hello.setName("Spring");
hello.show(name);
Hello对象是由Spring创建,对象的属性有Spring容器设置,这个过程就叫控制反转
控制:传统应用程序的对象是由程序本身控制创建的,使用Spring后,对象是由Spring来创建的;
反转:程序本身不创建对象,而变成被动的接受对象;
依赖注入:就是利用set方法来进行注入的;
IOC是一种由主动的编程变成被动的接收;
使用Spring后,我们彻底不用在程序中取改动了,要实现不同的操作,只需要在配置文件中进行修改,所谓的IOC,其实就是:对象由Spring来创建,管理,装配!
IOC创建对象的方式
1、使用无参构造创建对象
编写一个实体类User
package com.star.pojo;
public class User {
private String name;
public void User(){
System.out.println("对象创建了!")
}
public void setName(String name) {
this.name = name;
}
public void show(){
System.out.println("name="+name);
}
}
配置文件
<bean id="user" class="com.star.pojo.User">
<property name="name" value="star"/>
</bean>
测试
@Test
public void userTest(){
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
System.out.println("============================");
User user = (User) context.getBean("user");
user.show();
}
测试结果:
2、使用有参构造创建对象
编写实体类
package com.star.pojo;
public class User {
private String name;
public User(String name) {
this.name = name;
}
public void show() {
System.out.println("name="+name);
}
}
配置文件有三种写法(使用
1、下标赋值
<bean id="user" class="com.kuang.pojo.User">
<constructor-arg index="0" value="张三"/>
</bean>
2、类型赋值
<bean id="user" class="com.kuang.pojo.User">
<constructor-arg type="java.lang.String" value="李四"/>
</bean>
3、参数名赋值
<bean id="user" class="com.kuang.pojo.User">
<constructor-arg name="name" value="王五"/>
</bean>
测试代码不变
测试结果:
结论:在配置文件加载的时候,容器中管理的对象就已经初始化了!