三大框架之spring
spring是一个开源的控制反转(Inversion of Control,IoC)和面向切面(AOP)的容器框架,他的主要目的是简化企业开发。
[size=x-small]spring配置步骤[/size]
[size=medium]1.把jar包导入 classpath中[/size]

lib\spring-beans.jar
lib\spring-context.jar
lib\spring-core.jar
lib\commons-logging-1.1.jar
lib\spring-expression.jar



[size=medium]2.写spring的配置文件applicationContext.xml文件一般放在src类路径下[/size]


<?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>



[size=medium]4.读取配置文件并从配置文件中获得User对象[/size]


从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>



[size=medium]3.在web.xml中配置一个监听器,让web容器知道spring的存在[/size]


<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。




第一篇 格式问题还有内容 都多包涵哈