spring介绍;安装;使用
介绍
spring是一个轻量级的Java 开发框架。实现了 高内聚,低耦合;支持AOP(面向切面),控制反转(IOC)也叫依赖注入(Dependency lnjection),声明事务 整合其它ORM框架 等
IOC,控制反转(依赖注入,依赖查找): 应用本身不负责依赖对象的创建及维护,依赖对象的创建及维护是由外部容器负责的,控制权就由应用转移到了外部容器,控制权的转移就是控制反转。
依赖注入(Dependency lnjection) 在运行期间,由外部容器动态的将依赖对象注入到组件中
bean:所有的实例,对象 在IOC容器中都能称之为bean
Spring主要的优点
1.低侵入式设计,代码的污染率。
2.控制反转(Ioc)机制,也叫依赖注入(DI),降低了业务对象替换的复杂性,提高了组件之间的解耦。
3.面向切面(AOP),允许将一些通用的任务如安全、事务、日志等进行集中式处理,从而提供了更好的复用。
4.Spring的ORM 和 DAO 提供了与第三方持久层框架的良好整合,并简化了底层的数据库访问。
5.独立于各种应用服务器,基于Spring框架的应用程序,可以实现Write Once,Run Anywhere的承诺。
6.Spring并不强制应用完全依赖于Spring,开发者可自由选用Spring框架的部分或全部
在pom.xml中 添加 maven依赖
<dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> </dependency> <dependency> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> <version>1.2</version> </dependency> </dependencies>
spring配置模板
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <!-- spring配置文件 --> <bean id="方法名" class="包名.类名"></bean> </beans>
实例化spring容器
Spring的配置文件可以指定多个,通过string数组传入
1.在类路径下寻找配置来实例化容器
AppplicationContext context = new ClassPathXmlApplicationContext(new String[]{"beans.xml"});
2.在文件系统路径下寻找配置文件来实例化容器
ApplicationContext ctx = new FileSystemXmlApplicationContext(new String[]{"d:\\beans.xml"});
实例化bean
1.使用类构造器实例化
<bean id="carService" class="com.serviceImpl.CarServiceBean"></bean>
2.使用静态工厂方法实例化
<bean id="carService2" class="test.CarServiceBeanFactory" factory-method="createCarBean"></bean>
public class CarServiceBeanFactory {
public static CarServiceBean createCarBean(){
return new CarServiceBean();
}
}
3.使用实例化工厂方法实例化
<bean id="carService" class="test.CarServiceBeanFactory"></bean>
<bean id="carService3" factory-bean="carService" factory-method="createCarBean2"></bean>
public class CarServiceBeanFactory {
public CarServiceBean createCarBean2(){
return new CarServiceBean();
}
}
在每个spring IOC容器中一个bean定义只有一个对象实例。默认情况下会在容器启动初始化bean,
但可以指定bean节点lazy-init="true"延迟初始化bean,这时 只有第一次获取bean会初始化bean
如果想对所有bean都启用应用延迟初始化,可在根节点bean设置 default-lazy-init="true"
bean作用域
singleton | (单例模式,默认) 在整个springIOC容器中,使用singleton定义的bean将只有一个实例 |
prototype | 原形模式,每次通过容器的getBean方法获取prototype定义的bean,都会产生一个新的bean实例 |
request | 对于每次HTTP请求,使用request定义的Bean都将产生一个新的实例,每次HTTP请求都将产生不同的Bean实例,该作用域仅在给予web的Spring ApplicationContext情形下有效 |
session | 对于每次HTTP Session ,使用session定义的Bean都将产生一个新实例,该作用域仅在给予web的Spring ApplicationContext情形下有效 |
global session | 每个全局得HTTP Session对应一个Bean实例,该作用域仅在给予web的Spring ApplicationContext情形下有效 |
spring依赖注入方式:set注入,构造器注入,静态工厂注入,实例工厂注入 (只写用的最多的注入方式)
set注入:
package com.dao; public interface CarDao { public void append(String arg); }
package com.dao.Impl; import com.dao.CarDao; public class CarDaoImpl implements CarDao { //数据库保存操作层 public void append(String args) { System.out.println("CarDaoImpl"+args); } }
package com.service; public interface CarService { public void add(String args); }
package com.serviceImpl; import com.dao.CarDao; import com.service.CarService; public class CarServiceImpl implements CarService { private CarDao carDao; public CarDao getCarDao() { return carDao; } //注入 public void setCarDao(CarDao carDao) { this.carDao = carDao; } @Override public void add(String args) { // 业务操作层 System.out.println("CarServiceImpl"+args); args = args+":"+this.hashCode(); carDao.append(args); } }
package com.test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import com.service.CarService; public class RunTest { public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); CarService carService = (CarService) context.getBean("carServer"); carService.add("test"); } }
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="carServer" class="com.serviceImpl.CarServiceImpl"> <property name="carDao" ref="carBean"></property> </bean> <bean id = "carBean" class="com.dao.Impl.CarDaoImpl"></bean> </beans>
构造器注入:
修改两处就行了
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="carServer" class="com.serviceImpl.CarServiceImpl"> <constructor-arg name="carDao" ref="carBean"></constructor-arg> </bean> <bean id = "carBean" class="com.dao.Impl.CarDaoImpl"></bean> </beans>
package com.serviceImpl; import com.dao.CarDao; import com.service.CarService; public class CarServiceImpl implements CarService { private CarDao carDao; public CarServiceImpl(CarDao carDao) { this.carDao = carDao; } /* public CarDao getCarDao() { return carDao; } //注入 public void setCarDao(CarDao carDao) { this.carDao = carDao; } */ @Override public void add(String args) { // 业务操作层 System.out.println("CarServiceImpl"+args); args = args+":"+this.hashCode(); carDao.append(args); } }