三大框架之spring
spring是一个开源的控制反转(Inversion of Control,IoC)和面向切面(AOP)的容器框架,他的主要目的是简化企业开发。
spring配置步骤
1.把jar包导入 classpath中
lib\spring-beans.jar
lib\spring-context.jar
lib\spring-core.jar
lib\commons-logging-1.1.jar
lib\spring-expression.jar
2.写spring的配置文件applicationContext.xml文件一般放在src类路径下
<?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:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd">
.....
</beans>
1).spring的bean中装配
//一、新建一个实体类User,生成get,set方法并把user可以通过而配置文件直接赋值
<bean id="user" class="com.lsp.spring.User">
<property name="id" value="1"></property>
</bean>
//二、主要是注入依赖对象
//方式1、
<bean id="orderDao" class="cn.itcast.service.OrderDaoBean"/>
<bean id="orderService" class="cn.itcast.service.OrderServiceBean">
<property name="orderDao" ref="orderDao"/>
</bean>
//方式2、(使用内部bean,但该bean不能被其他bean使用)
<bean id="orderService" class="cn.itcast.service.OrderServiceBean">
<property name="orderDao">
<bean class="cn.itcast.service.OrderDaoBean"/>
</property>
</bean>
//三、集合类型的装配
//新建一个实体类
public class OrderServiceBean {
private Set<String> sets = new HashSet<String>();
private List<String> lists = new ArrayList<String>();
private Properties properties = new Properties();
private Map<String, String> maps = new HashMap<String, String>();
....//这里省略属性的getter和setter方法
}
//实体类在配置文件中的bean装配
<bean id="order" class="cn.itcast.service.OrderServiceBean">
<property name="lists">
<list>
<value>lihuoming</value>
</list>
</property>
<property name="sets">
<set>
<value>set</value>
</set>
</property>
<property name="maps">
<map>
<entry key="lihuoming" value="28"/>
</map>
</property>
<property name="properties">
<props>
<prop key="12">sss</prop>
</props>
</property>
</bean>
4.读取配置文件并从配置文件中获得User对象
从spring容器中得到bean
当spring容器启动后,因为spring容器可以管理bean对象的创建,销毁等生命周期,所以我们只需从容器直接获取Bean对象就行,而不用编写一句代码来创建bean对象。从容器获取bean对象的代码如下:
ApplicationContext appContext = new ClassPathXmlApplicationContext("beans.xml");
//OrderService为被注入的类 personService是配置文件中的id
OrderService service = (OrderService)appContext.getBean("personService");
实例化spring容器
实例化Spring容器常用的两种方式:
方法一:
在类路径下寻找配置文件来实例化容器
ApplicationContext ctx = new ClassPathXmlApplicationContext(new String[]{"beans.xml"});
方法二:
在文件系统路径下寻找配置文件来实例化容器
ApplicationContext ctx = new FileSystemXmlApplicationContext(new String[]{“d:\beans.xml“});
编写spring配置文件时,不能出现帮助信息
由于spring的schema文件位于网络上,如果机器不能连接到网络,那么在编写配置信息时候就无法出现提示信息,解决方法有两种:
1。让机器上网,eclipse会自动从网络上下载schema文件并缓存在硬盘上。
2。手动添加schema文件,方法如下: windwos->preferences->myeclipse->files and editors->xml->xmlcatalog 点"add",在出现的窗口中的Key Type中选择URI,在location中选"File system",然后在spring解压目录的dist/resources目录中选择spring-beans-2.5.xsd,回到设置窗口的时候不要急着关闭窗口,应把窗口中的Key Type改为Schema location,Key改为http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
指定Bean的初始化方法和销毁方法
在每个Spring IoC容器中一个bean定义只有一个对象实例。默认情况下会在容器启动时初始化bean,但我们可以指定Bean节点的lazy-init=“true”来延迟初始化bean,这时候,只有第一次获取bean会才初始化bean。如:
<bean id="xxx" class="cn.itcast.OrderServiceBean" lazy-init="true"/>
如果想对所有bean都应用延迟初始化,可以在根节点beans设置default-lazy-init=“true“,如下:
<beans default-lazy-init="true“ ...>
指定Bean的初始化方法和销毁方法
<bean id="xxx" class="cn.itcast.OrderServiceBean" init-method="init" destroy-method="close"/>
ssh整合
1.加入spring的jar包
2.加入struts-spring-plugin.jar
2.在spring中配置sessionfactory
<bean name="mySessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<property name="configLocations" value="classpath:hibernate.cfg.xml"></property>
</bean>
3.在web.xml中配置一个监听器,让web容器知道spring的存在
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:applicationContext.xml</param-value>
</context-param>
4.把struts2的action改成spring的
annotation方式Spring
首先需要在spring的xml配置文件头信息中加入下列代码。
<beans
//beans里面添加下面三句
xmlns:context="http://www.springframework.org/schema/context"
http://www.springframework.org/schema/cotext
http://www.springframework.org/schema/cotext/spring-context-2.5.xsd">
//在beans中间加下面一句
<context:annotation-config/>
<beans>
@Autowired
作用:表示该对应的成员属性可以完成自动配置功能(默认是根据byType的)
@Qualifier
因为@Autowired默认是根据byType来自动装配注入的。当有多个相同类型的bean时,Spring就会出现异常,提示找到多个符合条件的bean,但是不知道选择哪个bean来注入。
这时我们需要另外一注解来告诉Spring用那个bean,这就是@Qualifier注解, @Qualifier使用value参数来指定注入那个bean
//表示该成员属性可以自动装配(默认根据类型byType)
//当配置文件中有多个相同类型的bean时,需要使用@Qualifier注解来说明那个bean来自动装配
@Autowired
public void setUserDao(@Qualifier(value="u") UserDao userDao) {
this.userDao = userDao;
}
@Resource(重要、推荐)
@Resource默认是根据byName来的,如果没有找到相同的名称再根据byType,当然也可以指定bean的name如下:
@Resource(name="u2")
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
注意:一般使用@Resource而不会使用@Autowired
@Componet
以上使用@Autowired、@Resource注解时,还是需要在xml文件配置bean,这样就达不到完全使用annotation进行注解。因此现在引用@Component在那个bean前进行注解,表示那个类是需要的bean。有了@Componet注解,这样就不需要在xml文件中配置bean了。
<context:annotation-config/>
<context:component-scan base-package="com.lsp"/>
<!—不需要配置bean了-->
bean类中需要使用@Componet(或@Service、@Repository、@Controller)注解这个类是bean。—不需要配置bean了-->
bean类中需要使用@Componet(或@Service、@Repository、@Controller)注解这个类是bean。
第一篇 格式问题还有内容 都多包涵哈