spring学习(word文档备注不能正常显示,如有错误,忘不吝指正)

本文详细介绍了Spring与Hibernate的整合步骤,包括数据源配置、SessionFactory的建立以及DAO层的事务管理。同时,文章讨论了Spring的IOC容器特性,如setter注入和构造器注入,并探讨了AOP的概念及其在Spring中的应用,包括通知类型和事务管理。此外,还提到了Spring的动态代理机制,以及JDBC和HibernateTemplate的使用。最后,文章还涉及了Spring的测试支持和Struts的集成问题。
摘要由CSDN通过智能技术生成

1.        POJO(Plain OldJava Objects)简单的Java对象,实际就是普通JavaBeans,是为了避免和EJB混淆所创造的简称

2.        dom4j比jdom强大,都是Java的XML API

3.        PO:persistenceobject

4.        spring中读取xml文档的部分模拟代码

<beans>

         <bean id="u" class="com.bjsxt.dao.impl.UserDAOImpl[f1] " />

         <bean id="userService" class="com.bjsxt.service.UserService[f2] " >

                   <property name="userDAO" bean="u"[f3] />

         </bean>

        

</beans>

 

private Map<String , Object> beans = new HashMap<String, Object>();

 

public ClassPathXmlApplicationContext() throws Exception {

                   SAXBuilder sb=new SAXBuilder();

            

             Document doc=sb.build(this.getClass().getClassLoader().getResourceAsStream("beans.xml")); //构造文档对象

             Element root=doc.getRootElement(); //获取根元素HD

             List list=root.getChildren("bean");//取名字为disk的所有元素

             for(int i=0;i<list.size();i++){

                Element element=(Element)list.get(i);

                String id=element.getAttributeValue("id");

                String clazz=element.getAttributeValue("class");

                Object o = Class.forName(clazz).newInstance();

                System.out.println(id);

                System.out.println(clazz);

                beans.put(id, o);

               

                for(Element propertyElement : (List<Element>)element.getChildren("property")) {

                         String name = propertyElement.getAttributeValue("name"); //userDAO

                         String bean = propertyElement.getAttributeValue("bean"); //u

                         Object beanObject = beans.get(bean);//UserDAOImpl instance

                         

                         String methodName = "set" + name.substring(0, 1).toUpperCase() + name.substring(1);

                         System.out.println("method name = " + methodName);

                         

                         Method m = o.getClass().getMethod(methodName, beanObject.getClass().getInterfaces()[0]);

                         m.invoke(o, beanObject);

                }

             } 

         }

5.        配置文件中property标签一般都对应后台程序里面的set方法

6.        IOC 也称为DI  控制反转[f4]   依赖注入

7.        spring两大核心:IOC和AOP

8.        IOC容器作用:

实例化具体bean

动态装配

9.        AOP支持什么:

安全检查

管理transaction

10.    RC 版, Release Candidate 发布候选版

11.    dist版,distribution发布版

经常会有Helios RC2版本这样的,这里RC就是Release Candidate,意为发布候选版本。

还有时会有Eclipse Ganymede SR2 Packages (v 3.4.2) ,这里SR就是:修正版或更新版,修正了正式版推出后发现的Bug。

另外,常见软件中常会见到这些版本:

Trial:试用版,软件在功能或时间上有所限制,如果想解除限制,需要购买零售版。   Retail:零售版。

Free:免费版。

Full:完全版。

Alpha:内部测试版,通常在Beta版发布之前推出。

Beta:测试版,正式版推出之前发布的版本。以上两种测试版本Bug可能较多。

Final:正式版,软件的正式版本,修正了Alpha版和Beta版的Bug

SR:修正版或更新版,修正了正式版推出后发现的Bug。

Pro:专业版,需要注册后才能解除限制,否则为评估版本。

Plus:加强版。

Delux:豪华版。Plus版和Delux版区别不大,比普通版本多了一些附加功能

12.    spring中的bean.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"

       xsi:schemaLocation="http://www.springframework.org/schema/beans

           http://www.springframework.org/schema/beans/spring-beans-4.0.xsd">

 

  <bean id="u" class="com.bjsxt.dao.impl.UserDAOImpl">

  </bean>

        

  <bean id="userService" class="com.bjsxt.service.UserService">

       <property name="userDAO" ref="u"[f5]  />

       <!--   <ref bean=”u”></ref>    -->

  </bean>

 

 

</beans>

13.    尽量用ApplicationContext,是BeanFactory的上层,实现了更多的方法。

ApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml");

//BeanFactory ctx = new ClassPathXmlApplicationContext("beans.xml");

14.    spring初步调用代码

 

package com.bjsxt.service;

 

import org.junit.Test;

import org.springframework.context.ApplicationContext;

import org.springframework.context.support.ClassPathXmlApplicationContext;

 

import com.bjsxt.model.User;

 

//Dependency Injection

//Inverse of Control

public class UserServiceTest {

 

         @Test

         public void testAdd() throws Exception {

                   ApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml");

                  

//               BeanFactory ctx = new ClassPathXmlApplicationContext[f6] ("beans.xml");

                  

                   UserService service = (UserService)ctx.getBean("userService");

            

                   User u = new User();

                   u.setUsername("zhangsan");

                   u.setPassword("zhangsan");

                   service.add(u);

         }

 

}

15.    commons-logging.jar包是使用spring的必备包。

16.    如果在xml文档中不给提示,则可以window-preferences-myeclipse-filesand editors-xml-xml catalog-add。加入对于的xsd后缀的文件,然后选择Schema location,最后在key值后面加上location最后面的文件名(eg/spring-context-4.0.xsd。如果自己不配置,myeclipse就会去网上找。

17.    IOC:注入类型

1)        setter  调用了setXXX方法 

2)        构造方法(用的少)  

3)        接口注入(基本不用)

<bean id="userService" class="com.bjsxt.service.UserService">

       <!-- <property name="userDAO" ref="u" />[f7]  -->

       <constructor-arg><ref bean="u"/></constructor-arg>[f8] 

</bean>

18.    JMS (Java Message Service)

19.    IOC:id  vs. name

name可以用特殊字符

<bean id[f9] ="u" class="com.bjsxt.dao.impl.UserDAOImpl">

    </bean>

20.    IOC:简单属性的注入,对应简单数据类型(int等)的属性而言的,很少用

<property value[f10] =……>

21.    IOC:bean标签中scope属性,默认情况就是单例

1)        singleton单例,不论拿多少次都是同一个对象.

2)        prototype每次创建新的对象

22.    IOC:集合注入(很少用)具体看参考文档

23.    IOC:自动装配,bean标签的autowire属性。默认值为no,不自动装配。

自动装配对应的问题是:我们不手动在bean标签中加property标签的情况下,要装配的类怎么去找对应的bean的问题

1)        byName  bean的name属性和要装配的类中的属性名一样的情况下自动装配

2)        byType    会按类型来查,但是同样类型有多个bean的情况下就会报错

3)        如果所有的bean都用同一种autowire属性值,则可以在beans标签中添加defalt-autowire属性

24.    IOC:生命周期

1)        lazy_init[f11] :是bean标签的一个属性,如果不加lazy_init=”true”,只要context初始化,一new出:newClassPathXmlApplicationContext("beans.xml"),里面的所有类就初始化了;如果加上lazy_init=”true”,context初始化的时候不初始化这个类,什么时候用的时候(getBean)再初始化。(不重要)

2)        init-method destroy-method :类里面有初始化方法和destoy方法,容器初始化这个类的时候要调用初始化方法,容器关闭的时候要调用destory[f12] 方法,这个时候可以配置这两个bean标签的属性。不要和prototype[f13] 一起用(了解)

3)        beans标签中也有一个default-lazy-init属性

25.    IOC前面讲的配置都可以转换为Annotation,下面将是IOC的Annotation配置。

1)        Annotation第一步:

a)        修改xml文件:bean标签还是需要的,只是不需要bean标签里面的ref标签。也就是用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-4.0.xsd

        http://www.springframework.org/schema/context

        http://www.springframework.org/schema/context/spring-context-4.0.xsd">

 

    <context:annotation-config/>[f14] 

    <bean></bean>

</beans>

 

2)        @Autowired:自动装配,加在要注入属性的set方法上面。用的不多容易产生各种各样的问题

a)        默认按类型by type

b)        如果想用byName,使用@Qulifier[f15] 

c)        写在private field(第三种注入形式)(不建议,破坏封装)

d)        如果写在set上,@qualifier需要写在参数上

e)        还可以加属性required=false。注入的时候如果没有,也可以。

3)        @Required,实例化的时候必须注入,运行之前就检查,可以提早发现错误。写不写均可。如同@override,写了的话可以提早发现错误,在编译期间就能发现错误。

4)        @Resource[f16] (重要)importjavax.annotation.Resource;本来要找common.annotation.jar包,但是j2se jdk中好像也已经部分实现了这些标准。故目前先不加,后面再说

a)        加入:j2ee/common-annotations.jar

b)        默认按名称,名称找不到,按类型

c)        可以指定特定名称

d)        推荐使用

e)        不足:如果没有源码,就无法运用annotation,只能使用xml[f17] 

5)        @Component[f18]  @Service @Controller@Repository

4个注解目前基本上可以当做是一样的,没什么太大区别

a)        初始化的名字默认为类名首字母小写

b)        可以指定初始化bean的名字(getBean的时候用的参数)

6)        @Scope加在类外面,bean的生存范围

7)        @PostConstruct = init-method; @PreDestroy = destroy-method;加在bean方法前面

26.    JSRs:JavaSpecification Requests  在jcp(javaCommunity Process)网站上可以查看具体JSR

27.    Common annotations原本是Java EE 5.0(JSR 244)规范的一部分,现在SUN把它的一部分放到了Java SE 6.0.随着Annotation元数据功能(JSR 175)加入到Java SE 5.0里面,很多Java 技术(比如EJB,Web Services)都会用Annotation部分代替XML文件来配置运行参数(或者说是支持声明式编程,如EJB的声明式事务), 如果这些技术为通用目的都单独定义了自己的Annotations,显然有点重复建设, 所以,为其他相关的Java技术定义一套公共的Annotation是有价值的,可以避免重复建设的同时,也保证Java SE和Java EE 各种技术的一致性

28.    AOP:面向切面编程 Aspect-Oriented-Programming

29.    给一个方法前后加逻辑:

源码上加;继承该类,重写该方法;组合,新类里面有个原来对象的引用。

30.    动态代理:  jdk proxy invocationhaddler  具体参考

1)        InvocationHaddler  是代理实例的调用处理程序实现的接口。要实现这个接口,横切代码加在实现这个接口的类里面。

2)        Proxy 可以通过newProxyInstance静态方法来产生代理实例。要动态代理,要先产生被代理对象,然后通过上面实现了InvocationHaddler接口的类里面的构造方法注入,最后new出代理对象,接着就可以根据代理对象动态调用被代理对象的类的接口的方法。

31.    new Class[f19] []{target.class}也可以表示为对象.getClass().getInterfaces()”、表示Class类型的数组,里面装的是通过:类名.forName()、类名.class拿到的Class对象

32.    动态代理: 需要在多个方法上面都要加业务逻辑的时候,就可以考虑动态代理

代理&

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值