Spring学习记录1

Spring学习记录1

1.基本例子

第一步导入导入spring的jar包,或者使用Maven引入spring依赖

<dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
            <version>5.2.8.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.2.8.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>5.2.8.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-expression</artifactId>
            <version>5.2.8.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
            <version>1.2</version>
        </dependency>
    </dependencies>

第二步有一个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"
       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">
    <!-- 配置user类-->
    <bean id="user" class="Furrain.User"></bean>
    <!--setter注入属性-->
<!--    <bean id="book" class="Furrain.Book">-->
<!--        &lt;!&ndash;使用property完成属性注入&ndash;&gt;-->
<!--        <property name="bName" value="惊悚乐园"></property>-->
<!--        <property name="bPrice" value="128"></property>-->
<!--    </bean>-->

    <!--用有参构造注入属性-->
    <bean id="orders" class="Furrain.Orders">
        <constructor-arg name="oAddress" value="peiking"></constructor-arg>
        <constructor-arg name="oName" value="kimJisoo"></constructor-arg>
    </bean>

    <!--p空间注入-->
    <bean id="book" class="Furrain.Book" p:bName ="异常生物见闻录" p:bPrice="199">
    <!-- 注入null-->
<!--        <property name="bAuthor">-->
<!--            <null></null>-->
<!--        </property>-->
        <!--特殊符号,如<>
        1.html的转义符&lt;&gt;
        2.特殊符号写进CDATA
        -->
        <property name="bAuthor">
            <value><![CDATA[<<1122>>]]></value>
        </property>
    </bean>
</beans>

第三步,使用spring生成类实例

    @Test
    public void add() {
        // 加载配饰文件
        ApplicationContext context = new ClassPathXmlApplicationContext("spring/bean1.xml");
        User user = context.getBean("user",User.class);
        System.out.println(user);
        user.add();
    }

IOC操作(Bean管理)

1 基于xml
2 基于注解

基于xml

1.依赖注入

1.生成用例
2.依赖注入 DI DI是IOC里的一个步骤吧,感觉。

setter依赖注入

见上面例子

有参构造

见上面例子

注入null.

见上面例子

注入特殊值

见上面例子

注入自定义类对象

前面都是value
外部bean自定义对象需要ref引用其他的bean实例
内部就无所谓了

package Furrain.Dao;

/**
 * <Description>
 *
 * @author Furrain
 * @version 1.0
 * @ClassName UserDao
 * @createDate 2020/12/13 0:12
 * @see Furrain.Dao
 */
public interface UserDao {
    public void update();
}

package Furrain.Dao;

/**
 * <Description>
 *
 * @author Furrain
 * @version 1.0
 * @ClassName UserDaoImpl
 * @createDate 2020/12/13 0:12
 * @see Furrain.Dao
 */
public class UserDaoImpl implements UserDao{
    @Override
    public void update() {
        System.out.println("UserDao update....");
    }
}
package Furrain.Service;

import Furrain.Dao.UserDao;
import Furrain.Dao.UserDaoImpl;

/**
 * <Description>
 *
 * @author Furrain
 * @version 1.0
 * @ClassName UserService
 * @createDate 2020/12/13 0:13
 * @see Furrain.Service
 */
public class UserService {
    private UserDao Udao;

    public void setUdao(UserDao udao) {
        Udao = udao;
    }

    public void add() {
        System.out.println("service add...");
        Udao.update();
    }
}

<?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-->
        <bean id="userService" class="Furrain.Service.UserService">
    <!--注入userDao类对象.
    name:需要注入对象的名字
    ref:外部的bean
    -->
            <property name="Udao" ref="userDao"></property>
        </bean>
        <bean id="userDao" class="Furrain.Dao.UserDaoImpl"></bean>

    <!--内部bean-->
    <bean id="userService" class="Furrain.Service.UserService">
        <property name="Udao">
            <bean class="Furrain.Dao.UserDaoImpl"></bean>
        </property>
    </bean>
</beans>

测试

    @Test
    public void add() {
        ApplicationContext context= new ClassPathXmlApplicationContext("spring/bean2.xml");
        UserService uiService = context.getBean("userService",UserService.class);
        uiService.add();
    }
级联赋值

根据讲述者说明,其实上面的内部bean和外部bean也算级联赋值(意思调用一个类的时候,调用了另一个类,另一个类生成了实例,也进行了初始化赋值)
还有一种在一个bean的内部给另一个bean的值赋值,但是需要一个getter方法

package Furrain.bean;

/**
 * <Description>
 *
 * @author Furrain
 * @version 1.0
 * @ClassName Emp
 * @createDate 2020/12/13 1:03
 * @see Furrain.bean
 */
public class Emp {
    private String eName;
    public void seteName(String eName) {
        this.eName = eName;
    }

    public Dept geteDept() {
        return eDept;
    }

    public void seteDept(Dept eDept) {
        this.eDept = eDept;
    }

    private Dept eDept;

    public void printDemo() {
        System.out.println(eName);
        System.out.println(eDept);
    }
}

package Furrain.bean;

/**
 * <Description>
 *
 * @author Furrain
 * @version 1.0
 * @ClassName Dept
 * @createDate 2020/12/13 1:03
 * @see Furrain.bean
 */
public class Dept {
    private String dName;

    public void setdName(String dName) {
        this.dName = dName;
    }

    @Override
    public String toString() {
        return dName;
    }
}

<?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="dept" class="Furrain.bean.Dept"></bean>
    <bean id="emp" class="Furrain.bean.Emp">
        <property name="eName" value="王二狗子"></property>
        <property name="eDept" ref="dept"></property>
        <property name="eDept.dName" value="芯片业务部"></property>
    </bean>
</beans>
注入集合属性

数组/list/map/set

package Furrain;

import javafx.scene.control.ListCell;

import java.lang.reflect.Array;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * <Description>
 *
 * @author Furrain
 * @version 1.0
 * @ClassName Stu
 * @createDate 2020/12/13 1:25
 * @see Furrain
 */
public class Stu {
    private String[] courses;

    private List<String> likeGirlsList;

    private Map<String,String> infoMap;

    private Set<String> beLikedGirlsSet;

    private List<Pet> pets;

    public void setPets(List<Pet> pets) {
        this.pets = pets;
    }

    public void setCourses(String[] courses) {
        this.courses = courses;
    }

    public void setLikeGirlsList(List<String> likeGirlsList) {
        this.likeGirlsList = likeGirlsList;
    }

    public void setInfoMap(Map<String, String> infoMap) {
        this.infoMap = infoMap;
    }

    public void setBeLikedGirlsSet(Set<String> beLikedGirlsSet) {
        this.beLikedGirlsSet = beLikedGirlsSet;
    }

    public void printDemo() {
        System.out.println(Arrays.toString(courses));
        System.out.println(infoMap);
        System.out.println(beLikedGirlsSet);
        System.out.println(likeGirlsList);
        System.out.println(pets);
    }
}


package Furrain;

/**
 * <Description>
 *
 * @author Furrain
 * @version 1.0
 * @ClassName Pet
 * @createDate 2020/12/13 1:41
 * @see Furrain.Service
 */
public class Pet {
    private String pName;

    public void setpName(String pName) {
        this.pName = pName;
    }

    @Override
    public String toString() {
        return pName;
    }
}

<?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="stu" class="Furrain.Stu">
        <property name="courses">
            <array>
                <value>java</value>
                <value>c++</value>
                <value>pathon</value>
            </array>
        </property>
        <property name="likeGirlsList">
            <list>
                <value>张兰</value>
                <value>李花</value>
            </list>
        </property>
        <property name="infoMap">
            <map>
                <entry key="身高" value="177"></entry>
                <entry key="体重" value="77"></entry>
            </map>
        </property>
        <property name="beLikedGirlsSet">
            <set>
                <value>王虎</value>
                <value>赵晓华</value>
            </set>
        </property>
        <property name="pets">
            <list>
                <ref bean="pet1"></ref>
                <ref bean="pet2"></ref>
                <ref bean="pet3"></ref>
                <ref bean="pet4"></ref>
            </list>
        </property>
    </bean>
    <bean id="pet1" class="Furrain.Pet" p:pName="花花"></bean>
    <bean id="pet2" class="Furrain.Pet" p:pName="草草"></bean>
    <bean id="pet3" class="Furrain.Pet" p:pName="小黑"></bean>
    <bean id="pet4" class="Furrain.Pet" p:pName="大黄"></bean>
</beans>
提取公共数据

1.xml增加util命名空间,并抽取出公共部分

具体修改

<?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"
       <!--**********************这里******************************-->
       xmlns:util="http://www.springframework.org/schema/util"
       xsi:schemaLocation="http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd
                           http://www.springframework.org/schema/util https://www.springframework.org/schema/util/spring-util.xsd">
        <!--**********************这里******************************-->
    <bean id="stu" class="Furrain.Stu">
        <property name="courses">
            <array>
                <value>java</value>
                <value>c++</value>
                <value>pathon</value>
            </array>
        </property>
        <property name="likeGirlsList">
            <list>
                <value>张兰</value>
                <value>李花</value>
            </list>
        </property>
        <property name="infoMap">
            <map>
                <entry key="身高" value="177"></entry>
                <entry key="体重" value="77"></entry>
            </map>
        </property>
        <property name="beLikedGirlsSet">
            <set>
                <value>王虎</value>
                <value>赵晓华</value>
            </set>
        </property>
        <property name="pets" ref="petList">
        </property>
    </bean>
    <bean id="pet1" class="Furrain.Pet" p:pName="花花"></bean>
    <bean id="pet2" class="Furrain.Pet" p:pName="草草"></bean>
    <bean id="pet3" class="Furrain.Pet" p:pName="小黑"></bean>
    <bean id="pet4" class="Furrain.Pet" p:pName="大黄"></bean>
    <!--**********************这里******************************-->
    <util:list id="petList">
        <ref bean="pet1"></ref>
        <ref bean="pet2"></ref>
        <ref bean="pet3"></ref>
        <ref bean="pet4"></ref>
    </util:list>
    <!--**********************这里******************************-->
    <bean id="teacher" class="Furrain.Teacher">
        <property name="pets" ref="petList"></property>
    </bean>
</beans>
package Furrain;

import Furrain.Pet;

import java.util.List;

/**
 * <Description>
 *
 * @author Furrain
 * @version 1.0
 * @ClassName Teacher
 * @createDate 2020/12/13 1:54
 * @see Furrain.Service
 */
public class Teacher {
    public void setPets(List<Pet> pets) {
        this.pets = pets;
    }

    private List<Pet> pets;

    public void printDemo() {
        System.out.println(pets);
    }
}

这样,老师和学生就可以使用一样的pets了…

Bean的分类

普通Bean

之前用到的都是普通Bean,即class定义的是什么类型的,返回的就是什么类型

FactoryBean

返回的是一个不确定类型的对象

例子

package Furrain.FactorBean;

import Furrain.Pet;
import org.springframework.beans.factory.FactoryBean;

/**
 * <Description>
 *
 * @author Furrain
 * @version 1.0
 * @ClassName MyBean
 * @createDate 2020/12/13 2:30
 * @see Furrain.FactorBean
 */
public class MyBean implements FactoryBean<Pet> {
    @Override
    public Pet getObject() throws Exception {
        Pet pet = new Pet();
        pet.setpName("王老狗");
        return pet;
    }

    @Override
    public Class<?> getObjectType() {
        return Pet.class;
    }

    @Override
    public boolean isSingleton() {
        return false;
    }
}

package Furrain;

/**
 * <Description>
 *
 * @author Furrain
 * @version 1.0
 * @ClassName Pet
 * @createDate 2020/12/13 1:41
 * @see Furrain.Service
 */
public class Pet {
    private String pName;

    public void setpName(String pName) {
        this.pName = pName;
    }

    @Override
    public String toString() {
        return pName;
    }
}

<?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">
    <!-- 配置user类-->
    <bean id="mybean" class="Furrain.FactorBean.MyBean"></bean>
</beans>

测试

    @Test
    public void testFactoryBean() {
        ApplicationContext context = new ClassPathXmlApplicationContext("spring/bean5.xml");
        Pet mybean = context.getBean("mybean", Pet.class);
        System.out.println(mybean);
    }

虽然xml是Mybean,但是实际返回的是pet,实现了FactoryBean接口。

bean的作用域(重要)

1.spring中可以设置生成的是单实例还是多实例
2.默认情况下,spring生成的是单实例

默认下,不管用sprinmg创建多遍,得到的实例地址是一致的,可以自己试一下

如何设置多实例

spring的bean标签中有属性(scope)可以设置

scope的值:
1.默认的:singleton
2.prototype 多实例

区别

singleton与prototype
1.一个单的一个多的实例
2.第一个是单实例,很好理解,在加载配置文件的时候, ApplicationContext context = new ClassPathXmlApplicationContext(“spring/xxxx.xml”);
就可以生成实例对象了,因为不管怎么调,返回的都是这一个。
既然第二个是多的,就有一个问题,因为他不知道我要用几个,那他就不会提前就new出我想要的实例,那就是在调用时new XXXX xxx=
context.getBean(“xxx”,XXXX.class);

bean的生命周期(重要)

未完待续…

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
该资源内项目源码是个人的课程设计、毕业设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 该资源内项目源码是个人的课程设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值