0
点赞
收藏
分享

微信扫一扫

Spring(一)

岁月不饶人老不正经 2022-03-20 阅读 70
javaspring

Spring目的:解决企业开发的复杂性。

两大重点:IOC和AOP

IOC:没学这个之前我们是主动自己去new对象,然后调里面的方法,有了spring之后。
在这里插入图片描述
在这里插入图片描述
就可以把我们的那个类,写成这样的一个bean,装入进去,这个id就是我们随便起的名字,以后调用就调用这个名字,后面的class是你那个类的一个全路径,相当于标记你这个类的具体位置,这样spring才能找到。
在这里插入图片描述
测试:1,先下载springBean的配置文件,就通过new这个applicationcontext这个,返回一个context,通过这个去get一个我们写的bean,就会返回一个具体我们编写类型的一个对象。直接调用即可。

在这里插入图片描述
使用spring这些依赖需要加上。

IOC实现解析:
IOC思想是基于IOC容器来完成的,IOC容器底层就是对象工厂。

Spring IOC 两种实现方式(两个接口):
		1.BeanFactory:IOC容器实现,是spring内部使用的接口,不提供开发人员进行使用,这个方式加载spring配置文件时,不创建对象,当我们使用的时候才会去创建对象,就是getBean这步。
		2.ApplicationContext:BeanFactory的一个子接口,加载配置文件的时候就会把配置文件里面的对象进行创建。

什么是bean管理?
1.创建对象
2.注入属性

bean管理操作有两种方式?
1.基于xml实现方式
在这里插入图片描述
这就是基于xml的一个对象创建。一个一个的bean即使一个对象。
注意点啊:这个bean对象创建走的也是构造器,所以你在编写类的时候,这个类里面要是声明了一些属性,你必须加构造器,有参,无参的,这样你这些属性才会有默认的初始值,不然就报错。
2.基于注解的实现方式

Bean的注入方式?

1.set注入

核心就是一定要有set方法,我们现在编写一个类测试下,声明两个属性。
在这里插入图片描述
在这里插入图片描述
可以看到,我们在没有为属性写set方法的时候,无法对属性进行一个注入
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这就是通过set来对bean进行一个属性的注入。

2.使用有参。无参构造器进行注入

在这里插入图片描述

首先,我对这个类声明了两个属性,加了一个有参构造器,注意啊,加上有参,无参构造器如果你不主动创建,就没有无参构造器。
在这里插入图片描述
因为我们是通过有参构造器注入,所以这种时候,你没有无参也可以,但我们平时,可能不会这么特意的为了演示故意填值,所以我们在不通过构造器赋值的情况下,创建bean,无参是必须要加上的,不然bean对象无法创建。

在这里插入图片描述
在这里插入图片描述
第三种注入方式:p命名空间注入,这个需要在set注入的基础之上可以使用,必须有set方法,相当于对set注入里面的xml配置做一个简化
在这里插入图片描述

在这里插入图片描述
在spring中,在xml配置里面给属性写值,如果遇到特殊符号怎么办。如 <<上海>>这种的。 <![CDATA[<<上海>>]]>这种写法可以识别,ok
在这里插入图片描述

外部bean的xml注入方式

在这里插入图片描述

我现在想在UserService里面调用UserDao的实现类里面的方法,也就是UserDaoImpl里面的方法怎么做?怎么注入?
首先把UserService和UserDao这两个,注入到bean当中,去xml写。
在这里插入图片描述
我先是在UserService里面把UserDao引入进来,提供一个set方法。也就是通过set注入的方式引入外部bean。
在这里插入图片描述
然后这样就ok了。

一对多方式一:

部门类

public class Dept {
    private String name;

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

    @Override
    public String toString() {
        return "Dept{" +
                "name='" + name + '\'' +
                '}';
    }

员工类

public class Emp {
    private String eName;
    private String gender;
    private Dept dept;



    public void setDept(Dept dept) {
        this.dept = dept;
    }

    public void seteName(String eName) {
        this.eName = eName;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    public void show(){
        System.out.println(eName+"="+gender+"="+dept);
    }

首先,一个部门可以有多个员工,每个员工都会有自己所属的部门,这样我们在员工类里面,把部门这个类引入进来,当部门的一个属性,本次使用的是set注入,set方法记得写。
然后把员工的bean写出来,但这个部门这个对象属性,怎么弄呢?我们可以在员工这个bean中的里面在内嵌一个bean,就是部门bean,里面的属性在里面进行一个赋值。
在这里插入图片描述
测试
在这里插入图片描述

第二种,一对多的方式:这个名字真是花里胡哨,叫级联赋值,真对这名字起的无语,看起来还以为多高端呢。啊这这这

在这里插入图片描述
这个就跟上面那个引入外部bean的方式一样,只不过在这个外部bean的里面设置了值而已。真挺无语。
测试
在这里插入图片描述

第二种写法:

在员工里面为部门生成一个get方法,这样就可以在员工的bean里面,可以通过部门对象,直接get到它里面的属性,然后就可以直接赋值。
在这里插入图片描述

在这里插入图片描述

花样属性的注入,list,set,map,数组

public class Stun {
    private String name;
    private List<String> course;
    private Set<Integer> age;
    private String[] info;
    private Map<Integer,String> address;

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

    public void setCourse(List<String> course) {
        this.course = course;
    }

    public void setAge(Set<Integer> age) {
        this.age = age;
    }

    public void setInfo(String[] info) {
        this.info = info;
    }

    public void setAddress(Map<Integer, String> address) {
        this.address = address;
    }

    @Override
    public String toString() {
        return "Stun{" +
                "name='" + name + '\'' +
                ", course=" + course +
                ", age=" + age +
                ", info=" + Arrays.toString(info) +
                ", address=" + address +
                '}';
    }

    public void show(){
        System.out.println(address);
        System.out.println(info);
        System.out.println(age);
        System.out.println(course);
        System.out.println(name);
    }

然后去xml里面配置bean,其实这些类型看着不同,操作却很神似。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xmlns:p="http://www.springframework.org/schema/p"
     xsi:schemaLocation="http://www.springframework.org/schema/beans
      https://www.springframework.org/schema/beans/spring-beans.xsd">

<bean id="stun" class="com.bean.Stun">
  <property name="name" value="小张"/>
  <property name="address">
      <map>
          <entry key="1" value="无敌"/>
          <entry key="2" value="上进"/>
          <entry key="3" value="暴富"/>
      </map>
  </property>

  <property name="age">
      <set>
          <value>10000</value>
          <value>20000</value>
      </set>
  </property>

  <property name="course">
      <list>
          <value>月薪过w</value>
          <value>年薪过千万</value>
      </list>
  </property>

  <property name="info">
      <array>
          <value>有钱</value>
          <value>牛逼</value>
      </array>
  </property>
</bean>

</beans>

测试
在这里插入图片描述

对于属性为list集合里面的属性是对象的话如何去做?

在这里插入图片描述
在这里插入图片描述
一个学生会有多门课程,我们就把每一门课程在xml配置里面都列为一个个的bean,然后通过stu这个bean里面的这个list对象的属性的属性,进行一个引用在bean中即可。

util提取集合内容,作为一个公共部分。

在这里插入图片描述

spring有两种类型的Bean

1.普通的bean:就是我们在xml配置里面为每个类写的bean,这个返回值类型是固定的,我们定义什么类型,getbean的时候返回的就是什么类型。
2.工厂bean:这个和普通的bean的区别就是,返回值类型可以跟自己定义的不一样,使用方法,我们想改变的那个类,实现beanFactory,重写里面的方法,编写object类型的getbean方法即可,在里面new一个我们想要类型的bean。return返回出去即可。

举报

相关推荐

0 条评论