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
基于注解的配置
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
相关文章推荐
- eclipse导入工程中文乱码问题
- Ubuntu 14.04 安装jdk
- java之jsp笔记
- Java项目源码学习笔记(二):Path
- java学习第一天
- poj 2429 GCD & LCM Inverse 【java】+【数学】
- 【Java集合源码剖析】HashMap源码剖析
- eclipse项目调试配置文件路径
- Java基础(1)
- Java的运算符--与(&)、非(~)、或(|)、异或(^)详解
- 20145206邹京儒《Java程序设计》第7周学习总结
- 排序算法---2
- Java 读写Properties配置文件
- 基本数值类型转换
- java如何连接数据库Mysql
- java面向对象三大特性之继承
- java中的do……while……语句
- java 中对url的编码与解码
- Spring 3.1: Caching and EhCache
- 深入Java集合学习系列:HashMap的实现原理