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”)