Spring-02-helloSpring

Spring-02-helloSpring

1. 快速上手

mark

上一期中我们理解了IOC的基本思想,我们现在来看下Spring的应用

  1. 导入Jar包
1
2
3
4
5
6
7
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.0.RELEASE</version>
</dependency>
</dependencies>
  1. 编写一个Hello实体类
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
package com.zhuuu.pojo;

public class Hello {
private String str;

public String getStr() {
return str;
}

public void setStr(String str) {
this.str = str;
}

@Override
public String toString() {
return "Hello{" +
"str='" + str + '\'' +
'}';
}
}
  1. resources/applicationContext.xml
1
2
3
4
5
6
7
8
9
10
11
12
<?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">

<!--使用Spring来创建对象,在Spring中称为Bean-->
<bean id="hello" class="com.zhuuu.pojo.Hello">
<property name="str" value="Spring"/>
</bean>

</beans>
  • class 是 类型
  • id 是变量名
  • property 设置 值
  1. 测试
1
2
3
4
5
6
7
8
9
10
11
12
13
import com.zhuuu.pojo.Hello;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class MyTest {
public static void main(String[] args) {
// 获取Spring上下文对象!,现在所有对象都在Spring管理了
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");

Hello hello = (Hello) context.getBean("hello");
System.out.println(hello.toString());
}
}

2. 思考

  • Hello对象是由谁创建的?
    • 答:Spring创建的
  • Hello 对象的属性是怎么设置的 ?
    • 答:hello 对象的属性是由Spring容器设置的

这个过程就叫控制反转 :

  • 控制:谁来控制对象的创建 , 传统应用程序的对象是由程序本身控制创建的 , 使用Spring后 , 对象是由Spring来创建的
  • 反转:程序本身不创建对象 , 而变成被动的接收对象 .

依赖注入

  • 就是利用set方法来进行注入的

    IOC是一种编程思想,由主动的编程变成被动的接收

3. IOC 创建对象的方式(重要)

有关在Spring容器中使用其他形式的元数据的信息,请参见:

  • 基于注释的配置:Spring 2.5引入了对基于注释的配置元数据的支持。
  • 基于Java的配置:从Spring 3.0开始,Spring JavaConfig项目提供的许多功能成为核心Spring Framework的一部分。因此,您可以使用Java而不是XML文件来定义应用程序类外部的bean。要使用这些新功能,请参阅 @Configuration@Bean@Import,和@DependsOn注释。

Spring配置由容器必须管理的至少一个(通常是一个以上)bean定义组成。

  • 基于XML的配置元数据将这些bean配置为<bean/>顶级元素内的<beans/>元素。
  • Java配置通常@Bean@Configuration类中使用带注释的方法。

3.1 通过无参构造方法创建(默认实现)

  • 官方文档

mark

  1. User.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
package com.zhuuu.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);
}
}
  1. applicationContext.xml
1
2
3
4
5
6
7
8
9
10
<?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 id="user" class="com.zhuuu.pojo.User">
<property name="name" value="朱酱酱"/>
</bean>
</beans>
  1. 测试类
1
2
3
4
5
6
7
8
9
10
11
12
import com.zhuuu.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("applicationContext.xml");

User user = (User) context.getBean("user");
user.show();
}
}

结果可以发现,在调用show方法之前,User对象已经通过无参构造初始化了

3.2 通过有参构造方法创建

三种注入方式

  1. 根据index参数下标设置
  2. 根据参数名字设置
  3. 根据参数类型设置
  1. UserT.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
package com.zhuuu.pojo;

public class UserT {

private String name;

// 有参构造
public UserT(String name) {
this.name = name;
}

public void setName(String name) {
this.name = name;
}

public void show(){
System.out.println("name="+ name );
}
}
  1. 有参构造的三种注入方式
1
2
3
4
5
<!-- 第一种根据index参数下标设置 -->
<bean id="userT" class="com.zhuuu.pojo.UserT">
<!-- index指构造方法 , 下标从0开始 -->
<constructor-arg index="0" value="朱酱酱2"/>
</bean>
1
2
3
4
5
<!-- 第二种根据参数名字设置 -->
<bean id="userT" class="com.zhuuu.pojo.UserT">
<!-- name指参数名 -->
<constructor-arg name="name" value="朱酱酱2"/>
</bean>
1
2
3
4
<!-- 第三种根据参数类型设置 -->
<bean id="userT" class="com.zhuuu.pojo.UserT">
<constructor-arg type="java.lang.String" value="朱酱酱2"/>
</bean>
  1. 测试
1
2
3
4
5
6
7
8
9
10
11
12
import com.zhuuu.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("applicationContext.xml");

UserT user = (UserT) context.getBean("userT");
user.show();
}
}

结论:在配置文件加载的时候。其中管理的对象都已经初始化了!

打赏
  • 版权声明: 本博客所有文章除特别声明外,均采用 Apache License 2.0 许可协议。转载请注明出处!
  • © 2019-2022 Zhuuu
  • PV: UV:

请我喝杯咖啡吧~

支付宝
微信