30no2's Blog.

Spring黑马学习笔记二

字数统计: 1.4k阅读时长: 6 min
2021/04/22 Share

计划一周时间,学习javaspring 不知道能学习到什么水平,坚持,也是对自己的一点肯定。
第二天打卡。

一、Spring 配置文件

1、Bean的标签范围

  • singleton 默认值,单例
    • bean的实例化个数为1
    • 当加载配置文件的时候,Bean就会被创建
  • prototype 多例的
    • 实例化对象为多个
    • 当使用getBean()方法的时候,Bean才会创建

2、Bean生命周期配置

  • init-method:指定类中的初始化方法名称
    • 对象创建完成后,通过对象调用初始化方法
  • destory-method:指定类中销毁方法名称
    1
    <bean id="userDao" class="com.wwq.dao.impl.UserDaoImpl" init-method="init" destroy-method="destory"/>

3、Bean实例化的三种方式

  • 无参构造方法实例化
  • 工厂静态方法实例化
  • 工厂实例方法实例化

4、Bean的依赖注入分析

因为UserService和UserDao都在Spring容器中,而最终程序直接使用的是UserService,所以在Spring容器中,将UserDao设置到UserService内部

5、Bean的依赖注入概念

依赖注入(Dependency Injection):它是Spring框架核心Ioc的具体实现。

在编写程序时,通过控制反转,把对象的创建交给Spring。但是代码中不可能出现没有依赖的情况,IOC解耦只是降低他们的依赖关系,但不会消除,例如:业务层仍然会调用持久层的方法

那这种业务层和持久层的依赖关系,在使用Spring之后,就让Spring来维护了。简单的说,就是坐等框架把持久层对象传入业务层,而不用我们自己去获取

6、Bean依赖注入的方式

  • 构造方法
  • set方法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//UserServiceImpl.java
public class UserServiceImpl implements UserService{
private UserDao userDao;
//set方法注入
//public void setUserDao(UserDao userDao) {
// this.userDao = userDao;
//}
//构造方法注入

public UserServiceImpl(UserDao userDao) {
this.userDao = userDao;
}

public UserServiceImpl() {
}
1
2
3
4
5
6
   //set方法注入配置 
<bean id="userDao" class="com.wwq.dao.impl.UserDaoImpl"/>
<bean id="userService" class="com.wwq.service.UserServiceImpl">
//name的值是UserServiceImpl中set方法setUserDao的set后面的值UserDao U小写得来的。
<property name="userDao" ref="userDao"/>
</bean>
1
2
3
4
5
//构造方法注入
<bean id="userDao" class="com.wwq.dao.impl.UserDaoImpl"/>
<bean id="userService" class="com.wwq.service.UserServiceImpl">
<constructor-arg ref="userDao"/>
</bean>
  • p方法注入(本质也是set方法注入)

    • 配置文件中要引入P命名空间

      1
      xmlns:p="http://www.springframework.org/schema/p"
      1
      2
      <!--p方法注入-->
      <bean id="userService" class="com.wwq.service.UserServiceImpl" p:userDao-ref="userDao"/>

发现打卡是真的难啊,刚过两天就没能坚持下来,不说了。继续。。。。今天是2021年4月25日。。。感谢五一长假。

7、Bean的依赖注入的数据类型

bean除了对象的引用可以注入,普通的数据类型,集合都可以在容器中进行注入。

  • 普通数据类型

    • applicationContext.xml

      1
      2
      3
      4
      5
      6
      7
      8
      <bean id="userDao" class="com.wwq.dao.impl.UserDaoImpl">
      <property name="username" value="xx"/>
      <property name="age" value="14"/>
      </bean>

      <bean id="userService" class="com.wwq.service.UserServiceImpl">
      <constructor-arg ref="userDao"/>
      </bean>
  • UserDaoImpl.java

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    private String username;
    private int age;

    public void setUsername(String username) {
    this.username = username;
    }

    public void setAge(int age) {
    this.age = age;
    }

    public void save() {
    System.out.println(username+"======="+age);
    System.out.println("save running.....");
    }
  • 引用数据类型

    • applicationContext.xml

      1
      2
      3
      4
      5
      6
      7
      <bean id="userDao" class="com.wwq.dao.impl.UserDaoImpl"/>
      <bean id="userService" class="com.wwq.service.UserServiceImpl">
      <property name="userDao" ref="userDao"/>
      </bean>
      <bean id="userService" class="com.wwq.service.UserServiceImpl">
      <constructor-arg ref="userDao"/>
      </bean>
  • UserServiceImpl.java

    1
    2
    3
    4
    5
    6
    7
    8
    private UserDao userDao;
    //set方法注入
    public void setUserDao(UserDao userDao) {
    this.userDao = userDao;
    }
    public void save() {
    userDao.save();
    }
  • 集合数据类型

    • list
    • map
    • properties

    • application.xml

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      29
      30
      31
      32
      33
      34
      35
      36
      <bean id="userDao" class="com.wwq.dao.impl.UserDaoImpl">
      <property name="strList">
      <!-- list -->
      <list>
      <value>小王1</value>
      <value>小王2</value>
      <value>小王3</value>
      </list>
      </property>
      <!-- map -->
      <property name="useMap">
      <map>
      <entry key="u1" value-ref="user1"/>
      <entry key="u2" value-ref="user2"/>
      </map>
      </property>
      <!-- properties -->
      <property name="properties">
      <props>
      <prop key="p1">pp1</prop>
      <prop key="p2">pp2</prop>
      </props>
      </property>
      </bean>
      <bean id="user1" class="com.wwq.domain.User">
      <property name="name" value="汤姆"/>
      <property name="addr" value="北京"/>
      </bean>
      <bean id="user2" class="com.wwq.domain.User">
      <property name="name" value="汤姆"/>
      <property name="addr" value="北京"/>
      </bean>
      <bean id="userService" class="com.wwq.service.UserServiceImpl">
      <constructor-arg ref="userDao"/>
      </bean>
      </beans>
  • UserDaoImpl.java

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    private List<String> strList;
    private Map<String, User> useMap;
    private Properties properties;

    public void save() {
    System.out.println(strList);
    System.out.println(useMap);
    System.out.println(properties);
    System.out.println("save running.....");
    }

8、引入其他配置文件(分模块开发)

实际开发中。配置文件很繁杂其体积强大,所以将配置文件拆解到其他配置文件中,而在Spring主配置文件通过import标签进行加载

1
<import resource="applicationContext-xxx.xml"

9、知识要点

Spring的重点配置

  • < bean >标签
    • id属性:在容器中Bean实例的唯一标识,不允许重复
    • class属性:要实例化的Bean的全限定名
    • scopre属性:Bean的作用范围,常用的是singleton(默认)和prototype
    • < property >标签:属性注入
      • name属性:属性名称
      • value属性:注入的普通属性值
      • ref属性:注入对象的引用值
      • < list >标签
      • < map > 标签
      • < properties > 标签
    • < constructor-arg > 标签
  • < import >标签:导入其他的Spring的分文件
CATALOG
  1. 1. 一、Spring 配置文件
    1. 1.1. 1、Bean的标签范围
    2. 1.2. 2、Bean生命周期配置
    3. 1.3. 3、Bean实例化的三种方式
    4. 1.4. 4、Bean的依赖注入分析
    5. 1.5. 5、Bean的依赖注入概念
    6. 1.6. 6、Bean依赖注入的方式
    7. 1.7. 7、Bean的依赖注入的数据类型
    8. 1.8. 8、引入其他配置文件(分模块开发)
    9. 1.9. 9、知识要点