Spring框架学习笔记3

SpringIOC创建对象的方式
[0]不使用SpringIOC时的创建方式
无参构造器
有参构造器
反射

package com.sxt.test;

import com.sxt.pojo.Student;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Main {
    public static void main(String[] args) {
        // 解析applicationContext.xml,已经创建好对象放入内存中
        ApplicationContext applictionContext = new ClassPathXmlApplicationContext("applictionContext.xml");
        // 调用方法
        Student stu = applictionContext.getBean("stu", Student.class);
        stu.eat();
        System.out.println("---------------------------");
        Student stu2 = applictionContext.getBean("stu2",Student.class);
        System.out.println(stu2);
        System.out.println("---------------------------");
        Student stu3 = applictionContext.getBean("stu3",Student.class);
        System.out.println(stu3);
        System.out.println("---------------------------");
        Student stu4 = applictionContext.getBean("stu4",Student.class);
        System.out.println(stu4);
    }
}

在这里插入图片描述
在这里插入图片描述
[3]工厂模式
设计模式:为了解决某一类问题的产生
工厂模式:为了批量生产对象
工厂模式代码
非静态方法创建实例及静态方法创建实例
Factory.java

package com.sxt.test;

import com.sxt.pojo.Farmer;
import com.sxt.pojo.FisherMan;
import com.sxt.service.People;

public class Factory {
    /*public People getInstance(String param) {
        if("farmer".equals(param)){
            return new Farmer();
        }else if("fishman".equals(param)){
            return new FisherMan();
        }else{
            return null;
        }
    }*/
    public static People getInstance(String param) {
        if("farmer".equals(param)){
            return new Farmer();
        }else if("fishman".equals(param)){
            return new FisherMan();
        }else{
            return null;
        }
    }
}

People.java
Farmer.java
FisherMan.java

package com.sxt.service;

public interface People {
    public void eat();
    public void run();
}
package com.sxt.pojo;

import com.sxt.service.People;

public class Farmer implements People {
    @Override
    public void eat() {
        System.out.println("农民吃");
    }

    @Override
    public void run() {
        System.out.println("农民跑");
    }
}
package com.sxt.pojo;

import com.sxt.service.People;

public class FisherMan implements People {
    @Override
    public void eat() {
        System.out.println("渔民吃");
    }

    @Override
    public void run() {
        System.out.println("渔民跑");
    }
}
package com.sxt.test;

import com.sxt.pojo.Farmer;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class SpringIOCWay3 {
    public static void main(String[] args) {
        /*等价普通代码
        Factory factory = new Factory();
        Farmer farmer = (Farmer)factory.getInstance("farmer");
        farmer.eat();*/
        /*IOC
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
        Factory factory = (Factory)applicationContext.getBean("factory");
        Farmer farmer = (Farmer)factory.getInstance("farmer");*/
        /* 等价普通代码
        Farmer farmer = (Farmer) Factory.getInstance("farmer");*/
        // IOC
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applictionContext.xml");
        Farmer farmer = (Farmer)applicationContext.getBean("farmery");


    }
}

applicationContext.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">
    <!-- [1] Student stu = new Student() -->
    <bean id="stu" class="com.sxt.pojo.Student"/>
    <!-- [2] Student stu = new Student(25,"男","ds") -->
    <bean id="stu2" class="com.sxt.pojo.Student">
        <!-- 构造器参数 -->
        <!-- 位置无所谓 -->
        <!-- name 对应构造方法的形参名 value 对应实参名-->
        <constructor-arg name="age" value="25"></constructor-arg>
        <constructor-arg name="name" value="dc"></constructor-arg>
        <constructor-arg name="sex" value=""></constructor-arg>
    </bean>
    <bean id="stu3" class="com.sxt.pojo.Student">
        <!-- 构造器参数 -->
        <!-- type 指定参数类型 -->
        <constructor-arg name="a" type="int" value="25"></constructor-arg>
        <constructor-arg name="b" value="dc"></constructor-arg>
    </bean>
    <bean id="stu4" class="com.sxt.pojo.Student">
        <!-- 构造器参数 -->
        <!-- index 指定参数位置,从0开始 -->
        <constructor-arg name="a" type="int" index="0" value="25"></constructor-arg>
        <constructor-arg name="b" value="dc"></constructor-arg>
    </bean>
    <!--  Factory factory = new Factory();
        Farmer farmer = (Farmer)factory.getInstance("farmer");
     -->
    <!--<bean id="factory" class="com.sxt.test.Factory"></bean>
    <bean id="farmerx" factory-bean="factory" factory-method="getInstance">
        <constructor-arg name="param" value="farmer"></constructor-arg>
    </bean>-->
    <!--Farmer farmer = (Farmer)Factory.getInstance(farmer)-->
    <bean id="farmery" class="com.sxt.test.Factory" factory-method="getInstance">
        <constructor-arg name="param" value="farmer"></constructor-arg>
    </bean>

</beans>

注:文件名是applictionContext.xml不是applicationContext.xml
是我少写了字母a,导致文件找不到,报错;今天修改下,ClassPassXmlApplicationContext(“applictionContext.xml”)
就可以了。而不是ClassPassXmlApplicationContext(“applicationContext.xml”)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值