Spring
参考视频:B站狂神,写这个只是方便个人复习,怎么写是我自己的事,我能看懂就行,没要求非要让你看!白嫖还挑刺,是很没有风度的事情。希望做个有风度的“五好青年”!
3、HelloSpring
新建项目,导入Jar包
- 注 : spring 需要导入commons-logging进行日志记录 . 利用maven , 它会自动下载对应的依赖项。
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.12.RELEASE</version>
</dependency>
</dependencies>
编写代码:
- 编写一个Hello实体类
package com.github.subei.pojo;
public class Hello {
private String src;
public String getSrc() {
return src;
}
public void setSrc(String src) {
this.src = src;
}
@Override
public String toString() {
return "Hello{" +
"src='" + src + '\'' +
'}';
}
}
- 编写spring文件 , 这里命名为beans.xml
<?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 http://www.springframework.org/schema/beans/spring-beans.xsd">
<!--使用Spring来创建对象,在spring这些部称Bean-->
<bean id="hello" class="com.github.subei.pojo.Hello">
<property name="src" value="Spring"/>
</bean>
</beans>
3、我们可以去进行测试了 .
import com.github.subei.pojo.Hello;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class MyTest {
public static void main(String[] args) {
//解析beans.xml文件 , 生成管理相应的Bean对象
ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
//getBean : 参数即为spring配置文件中bean的id .
Hello hello = (Hello) context.getBean("hello");
System.out.println(hello.toString());
}
}
思考:
- Hello 对象是谁创建的 ?
- hello 对象是由Spring创建的。
- Hello 对象的属性是怎么设置的 ?
- hello 对象的属性是由Spring容器设置的。
这个过程就叫控制反转 :
- 控制 : 谁来控制对象的创建 , 传统应用程序的对象是由程序本身控制创建的 , 使用Spring后 , 对象是由Spring来创建的。
- 反转 : 程序本身不创建对象 , 而变成被动的接收对象。
依赖注入 : 就是利用set方法来进行注入的。
-
IOC是一种编程思想,由主动的编程变成被动的接收。
-
可以通过new ClassPathXmlApplicationContext去浏览一下底层源码。
修改案例一:
- 在案例一中, 新增一个Spring配置文件beans.xml
<?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 http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="mysqlImpl" class="com.github.subei.dao.UserDaoMysqlImpl"/>
<bean id="oracleImpl" class="com.github.subei.dao.UserDaoOracleImpl"/>
<bean id="UserServiceImpl" class="com.github.subei.service.UserServiceImpl">
<!-- ref:引用spring容器中创建好的对象! value:具体的值,基本数帮类型! -->
<property name="userDao" ref="mysqlImpl"/>
</bean>
</beans>
- 测试!
@Test
public void test2(){
// 获取AppLicationcontext;拿到Spring容器
ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
UserServiceImpl serviceImpl = (UserServiceImpl) context.getBean("UserServiceImpl");
serviceImpl.getUser();
}
- <mark>OK , 到了现在 , 彻底不用再程序中去改动了 , 要实现不同的操作 , 只需要在xml配置文件中进行修改 , 所谓的IoC,一句话搞定 : 对象由Spring 来创建 , 管理 , 装配 !</mark>
4、IOC创建对象方式
4.1 方式一
方式一:通过无参构造方法来创建。
- User.java
package com.github.subei.pojo;
public class User {
private String name;
public User() {
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 );
}
}
- beans.xml
<?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 http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="user" class="com.github.subei.pojo.User">
<property name="name" value="subei"/>
</bean>
</beans>
- 测试类
import com.github.subei.pojo.User;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class MyTest {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
// 在执行getBean的时候, user已经创建好, 通过无参构造
User user = (User) context.getBean("user");
// 调用对象的方法 .
user.show();
}
}
- 通过debug可以发现,在调用show方法之前,User对象已经通过无参构造初始化了!
4.2 方式二
方式二:通过有参构造方法来创建。
1.UserT . java
package com.github.subei.pojo;
public class UserT {
private String name;
public UserT(String name) {
this.name = name;
}
public UserT() {
System.out.println("UserT被创建了");
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void show() {
System.out.println("name=" + name);
}
}
2、beans.xml 有三种方式编写
<?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 http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- 第一种:根据index参数下标设置 -->
<!-- <bean id="userT" class="com.github.subei.pojo.UserT">-->
<!-- <constructor-arg index="0" value="subeily——"/>-->
<!-- </bean>-->
<!-- 第二种:根据参数类型设置,不建议使用 -->
<!-- <bean id="userT" class="com.github.subei.pojo.UserT">-->
<!-- <constructor-arg type="java.lang.String" value="subeily2——"/>-->
<!-- </bean>-->
<!-- 第三种:根据参数名字设置 -->
<bean id="userT" class="com.github.subei.pojo.UserT">
<!-- name指参数名 -->
<constructor-arg name="name" value="subeily3——"/>
</bean>
</beans>
3、测试
@Test
public void test(){
ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
// 在执行getBean的时候, user已经创建好, 通过无参构造
UserT user = (UserT) context.getBean("userT");
// 调用对象的方法 .
user.show();
}
总结:在配置文件加载的时候,容器中管理的对象就已经初始化了!
5、Spring配置
5.1 别名
- alias 设置别名 , 为bean设置别名 , 可以设置多个别名。
<!--别名,如果添加了别名,我们也可以使用别名获取到这个对象-->
<alias name="userT" alias="userNew"/>
5.2 Bean的配置
<!-- id:bean 的唯一标识符,也就是相当于我们学的对象名 class:bean 对象所对应的全限定名:包名+类型 name:也是别名,而且name可以同时取多个别名 -->
<bean id="user2" class="com.github.subei.pojo.UserT" name="user2,u2,u3">
<property name="name" value="懒羊羊的蛋糕店!"/>
</bean>
5.3 import
这个import,一般用于团队开发使用,他可以将多个配置文件,导入合并为一个。
<import resource="{path}/beans.xml"/>
<?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 http://www.springframework.org/schema/beans/spring-beans.xsd">
<import resource="beans.xml"/>
<import resource="beans2.xml"/>
<import resource="beans3.xml"/>
</beans>