spring------>Helloworld
先写一个helloworld的类。
public class HelloWorld {
private String name;
public void setName2(String name) {
this.name = name;
}
public void hello(){
System.out.println("hello:"+name);
}
}
然后写配置文件
<bean id="helloworld" class="com.spring.beans.HelloWorld">
<property name="name2" value="luwei"/>
</bean>
这是set方法注入。set后面的名字要一样。
然后就调用了
//1:创建spring的IOC容器对象
ApplicationContext ctx =new ClassPathXmlApplicationContext("applicationContext.xml");
//applicationContext是IOC容器的一个接口。
//ClassPathXmlApplicationContext从类路径下加载配置文件。
//2:从IOC中获取Bean
HelloWorld helloWorld=(HelloWorld) ctx.getBean("helloworld");
//getBean("")中对应的是Bean中的id。是用反射的技术。也可以getBean(Helloworld.class);但是要确保一个id。
//3:掉方法
helloWorld.hello();
对比传统应用:
HelloWorld helloWorld=new HelloWorld();
helloWorld.setName("luwei");
helloWorld.hello();
-----------------------------------------------------------------
依赖注入
讲到spring,IOC和AOP是两大基石。
IOC;(inversion of control)
IOC控制反转,不是什么技术,而是一种设计思想。在java开发中,IOC意味着将你设计好的对象交给容器控制,而不是传统的在你的对象内部直接控制。
学习IOC要明白两个问题:
1:谁控制谁,控制什么:传统JAVA SE中,直接在对象内部通过new进行创建对象。是程序主动去创建依赖对象;而IOC是有专门的容器来创建这些对象。由IOC容器来控制对象的 创建。谁控制谁,当然是IOC控制对象。控制什么:控制外部资源(不只是对象包括比如文件等);
<property name="name2" value="luwei"/> name中的就是set后面的对应的值;
</bean>
public class Car {
private String brand;
private String corp;
private int price;
private int maxSpeed;
public Car(String brand, String corp, int price, int maxSpeed) {
super();
this.brand = brand;
this.corp = corp;
this.price = price;
this.maxSpeed = maxSpeed;
}
@Override
public String toString() {
return "Car [brand=" + brand + ", corp=" + corp + ", price=" + price
+ ", maxSpeed=" + maxSpeed + "]";
}
}
配置文件
<bean id ="car" class="com.spring.beans.Car">
<constructor-arg value="audi" index="0"></constructor-arg>
<constructor-arg value="shanghai" index="1"></constructor-arg>
<constructor-arg value="30000" index="2"></constructor-arg>
<constructor-arg value="300" index="3"></constructor-arg>
</bean>
<constructor-arg value="30000" type="int"></constructor-arg>
工厂方法注入:
import java.util.HashMap;
import java.util.Map;
public class StaticCarFactory {
private static Map<String,Car> cars=new HashMap<String, Car>();
static{
cars.put("audi", new Car("audi","shanghai",30000,300));
cars.put("ford", new Car("ford","shanghai",30000,300));
}
public static Car getCar(String name){
return cars.get(name);
}
}
配置文件:
<constructor-arg value="audi"></constructor-arg>
</bean>
import java.util.HashMap;
import java.util.Map;
public class InstanceCarFactory {
private Map<String, Car> cars=null;
public InstanceCarFactory(){
cars=new HashMap<String, Car>();
cars.put("audi", new Car("audi","shanghai",30000,300));
cars.put("ford", new Car("ford","shanghai",30000,300));
}
public Car getCar(String brand){
return cars.get(brand);
}
}
配置文件:
<bean id="car2" factory-bean="carFactory" factory-method="getCar">
<constructor-arg value="ford"></constructor-arg>
</bean>
创建的时候,spring启动的时候所有的单例的bean都被创建。
<!--
autowire:自动装载
byType:将工厂中与目标组件的属性同类型的bean,赋值给对应属性
byName:将工厂中与目标组件的属性同名的bean,赋值给对应属性
-->
<bean id="ioc49" class="com.c47.IOC.test.TestIOC3" autowire="byName"></bean>