spring入门

spring入门笔记

1,先新建一个java工程

2,在工程中配置类库lib:


3,新建一个pojo包,包中新建两个类:

类HelloWord:

<span style="font-size:18px;">package pojo;

public class HelloWord {
private String message;

public String getMessage() {
	return message;
}

public void setMessage(String message) {
	this.message = message;
}
public void printMessage(){
	System.out.println("Your Message:"+message);
}
}</span>

类MainApp:

<span style="font-size:18px;">package pojo;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class MainApp {
public static void main(String[] args) {
	ApplicationContext context=new ClassPathXmlApplicationContext("application.xml");
	HelloWord obj=(HelloWord) context.getBean("HelloWord");
	obj.printMessage();
}

}</span>

3,建一个配置文件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:context="http://www.springframework.org/schema/context"
     xsi:schemaLocation="http://www.springframework.org/schema/beans
         http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
         http://www.springframework.org/schema/context
         http://www.springframework.org/schema/context/spring-context-3.0.xsd">

<bean id="HelloWord" class="pojo.HelloWord">
		<property name="message" value="Helloword panpan "></property>
</bean>
</beans>

效果如下:




spring核心机制:依赖注入:

1.理解控制反转:

依赖注入和控制反转含义相同,当某个java实例需要另一个java实例时,传统的方法是由调用者来创建被调用者的实例(例如,使用new 关键字获得被调用者实例)

控制反转:采用依赖注入方式时,被调用者不需要再由调用者来创建。

依赖注入:被调用者的实例通常是由spring容器来完成的,然后注入调用者,调用者便获得了被调用者的实例。


spring之IOC:

IOC控制反转,也被称为依赖注入,是spring的核心,对于spring框架来说,就是由spring来负责控制对象的生命周期和对象间的关系。

通俗的理解IOC即:就谈恋爱而言,传统的方式为自己去了解异性的信息,而使用IOC就相当于委托婚介所来找女朋友。


使用IOC不会对业务对象构成很强的侵入性,使用IOC之后可以获得更好的可实行性,可重用性和可扩展性。

(可结合电脑主机与USB接口进行理解)

 


spring之AOP

面向切面,主要用于诸如事务管理,安全检查,缓存,对象池管理等应用中。





通俗的理解AOP:一个组件A,只需关心自己的业务逻辑,在使用组件B时,不需要自己调用,而是由配置文件调用。


Spring开发环境配置:





创建一个基于springIOC的小程序的步骤:
建立spring工程
编写java文件
编写配置文件
运行示例工程

创建一个springIOC的案例:

1.创建一个java工程SpringIoc;
2.在工程中添加lib文件夹并添加jar包,需要的jar包有:
com.springsource.org.apache.commons.logging-1.1.1.jar
spring-aop-4.1.5.RELEASE.jar
spring-aspects-4.1.5.RELEASE.jar
spring-beans-4.1.5.RELEASE.jar
spring-context-4.1.5.RELEASE.jar
spring-core-4.1.5.RELEASE.jar
spring-expression-4.1.5.RELEASE.jar
spring-instrument-4.1.5.RELEASE.jar
spring-instrument-tomcat-4.1.5.RELEASE.jar
spring-jdbc-4.1.5.RELEASE.jar
spring-jms-4.1.5.RELEASE.jar
spring-messaging-4.1.5.RELEASE.jar
spring-orm-4.1.5.RELEASE.jar
spring-oxm-4.1.5.RELEASE.jar
spring-test-4.1.5.RELEASE.jar
spring-tx-4.1.5.RELEASE.jar
spring-web-4.1.5.RELEASE.jar
spring-webmvc-4.1.5.RELEASE.jar
spring-webmvc-portlet-4.1.5.RELEASE.jar
spring-websocket-4.1.5.RELEASE.jar

3.新建一个包com.jike.spring01,在包中新建类接口IHelloMessage.java
package com.jike.spring01;

public interface IHelloMessage {
	
	public String sayHello();
}
然后新建HelloWorld类和HelloChina类继承接口IHelloMessage.
package com.jike.spring01;

public class HelloWorld implements IHelloMessage {

	@Override
	public String sayHello() {
		// TODO Auto-generated method stub
		return "Hello World!";
	}

}
---------------------------------------------------------------------------------------------------------------------------------------------
package com.jike.spring01;

public class HelloChina implements IHelloMessage{

	@Override
	public String sayHello() {
		// TODO Auto-generated method stub
		return "世界,你好!";
	}

}
-----------------------------------------------------------------------------------------------------------------------------------------------
再然后,新建Main类:
package com.jike.spring01;

import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.core.io.FileSystemResource;
import org.springframework.core.io.Resource;

@SuppressWarnings("deprecation")
public class Main {
	public static void main(String[] args) {
		Resource    r=new FileSystemResource("helloMessage.xml");
		BeanFactory f=new XmlBeanFactory(r);
		Person person=(Person)f.getBean("person");
		String s=person.sayHello();
		System.out.println("The person is currluty is"+""+s);
	}
}
最后,配置xml文件helloMessage.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN"  
"http://www.springframework.org/dtd/spring-beans-2.0.dtd"> 
 
<beans>  
	<bean id="helloWorld" class="com.jike.spring01.HelloWorld"></bean>
	<bean id="helloChina" class="com.jike.spring01.HelloChina"></bean>
	<bean id="person"     class="com.jike.spring01.Person">
		<property name="helloMessage" ref="helloWorld"></property>
	</bean>
</beans>  
-------------------------------------------------------------------------------------------------------------------------------------------------
在xml文件中,核心语句ref绑定的是HelloWord,
<bean id="person"     class="com.jike.spring01.Person">
		<property name="helloMessage" ref="helloWorld"></property>
	</bean>
运行出结果如下:


----------------------------------------------------------------------------------------------------------------------------------------------------------
如果想切换为输出中文,只需将xml里的ref换为"helloChina"即可,这里就体现了springIOC便利性的极大优势。 如下:
<bean id="person"     class="com.jike.spring01.Person">
		<property name="helloMessage" ref="helloChina"></property>
	</bean>

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------






不太提倡接口注入:





java反射机制:



新建一个类Car:

package com.jike.java;

public class Car {
	private String brand;

	private String color;

	private int maxSpeed;

	//1.默认构造函数
	public Car(){
		System.out.println("init car!!");
		}
	
	//2.带参构造函数
	public Car(String brand,String color,int maxSpeed){
		this.brand = brand;
		this.color = color;
		this.maxSpeed = maxSpeed;
	}
	
	//3.未带参的方法
	public void introduce() {
       System.out.println("brand:"+brand+";color:"+color+";maxSpeed:"+maxSpeed);
	}

	public String getBrand() {
		return brand;
	}

	public void setBrand(String brand) {
		this.brand = brand;
	}

	public String getColor() {
		return color;
	}

	public void setColor(String color) {
		this.color = color;
	}

	public int getMaxSpeed() {
		return maxSpeed;
	}

	public void setMaxSpeed(int maxSpeed) {
		this.maxSpeed = maxSpeed;
	}
}

再建一个类ReflectTest:

package com.jike.java;
import java.lang.reflect.Constructor;
import java.lang.reflect.Method;

public class ReflectTest {
	@SuppressWarnings("unchecked")
	public static Car  initByDefaultConst() throws Throwable
	{
		//1.通过类装载器获取Car类对象
		ClassLoader loader = Thread.currentThread().getContextClassLoader();		
		Class clazz = loader.loadClass("com.jike.java.Car");
	
		//2.获取类的默认构造器对象并实例化Car
		Constructor cons = clazz.getDeclaredConstructor((Class[])null);
		Car car = (Car)cons.newInstance();
		
		//3.通过反射方法设置属性
		Method setBrand = clazz.getMethod("setBrand",String.class);		
		setBrand.invoke(car,"奔驰");		
		Method setColor = clazz.getMethod("setColor",String.class);
		setColor.invoke(car,"黑色");		
		Method setMaxSpeed = clazz.getMethod("setMaxSpeed",int.class);
		setMaxSpeed.invoke(car,200);		
		return car;
	}
	
	@SuppressWarnings("unchecked")
	public static Car initByParamConst()  throws Throwable{
		//1.通过类装载器获取Car类对象
		ClassLoader loader = Thread.currentThread().getContextClassLoader();
		Class clazz = loader.loadClass("com.jike.java.Car");
		
		//2.获取类的带有参数的构造器对象
		Constructor cons = clazz.getDeclaredConstructor(new Class[]{String.class,String.class,int.class});
		
		//3.使参数的构造器对象实例化Car
		Car car = (Car)cons.newInstance(new Object[]{"宝马","红色",180});
		return car;	
	}
	
	public static void main(String[] args) throws Throwable {
		Car car1 = initByDefaultConst();
		Car car2 = initByParamConst();
		car1.introduce();
		car2.introduce();
	}
}
可运行出结果:



BeanFactory的介绍:

beanFactory是一个工厂类,可以创建并管理各种类的对象,spring称这些创建和管理的java对象为Bean.在spring中,java对象的范围更加宽泛。

初始化顺序

1,创建配置文件;

2,装载配置文件;

3,启动IOC容器;

4,获取Bean实例;










简化Spring xml的配置:

自动装配Bean的属性

当Spring装配Bean的属性时,如果非常明确,则可以使用Bean的自动装载模式。

4种自动装配类型:

byName

byType

constructor

autodetect





基于注解的配置








------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值