您的位置:首页 > 编程语言 > Java开发

spring入门

2016-04-16 16:54 288 查看

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





基于注解的配置















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





内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: