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
Spring开发环境配置:
创建一个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
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>
<bean id="person" class="com.jike.spring01.Person">
<property name="helloMessage" ref="helloWorld"></property>
</bean>
----------------------------------------------------------------------------------------------------------------------------------------------------------
<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
基于注解的配置
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------