`

spring3学习入门示例工程

 
阅读更多

 

 1. github地址 https://github.com/zhwj184/springdemo,后续再加入其他内容

     

springdemo
==========

spring3的IOC,AOP,JDBC,orm等各个模块的使用示例集锦,可以作为入门的spring学习示例教程

在org.springweb.context.test包下
1.IOC
    * spring框架设计理念(POJO化)
    * 1.IOC 概念,作用,优点 Donnot call me,we will call you.  beanfactory,applicationcontext(事件发布,国际化支持)
    * 2.注入方法 setter,construtor(参数太多,可变参数列表),接口注入  
    * 3.注入类型 bean,基本类型,map,list等
    * 4.注入方式 byname,bytype,default
    * 5.annotation(autowired,resource,@Qualifier)
    * 6.bean的生命周期 init-method,destroy-method,initiableBean, DisposableBean,lasyinit,singleton,prototype @PostConstruct @PreDestroy
    * 7.postProcessBean
    * 8.IOC 应用场景,datasouce配置,线程池配置,
    * 9.工厂方法与 FactoryBean
    * 10 messagesource,propertyplaceholder
执行SpringContextIOCMain main函数
   

             public class SpringContextIOCMain {

             public static void main(String[] args) {
             	//编码方式,xml配置方式,properties方式
             	//FileSystemXmlApplicationContext ClassPathXmlApplicationContext XmlWebApplicationContext
             	ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");
             	HelloService helloSerice = (HelloService) context.getBean("helloService");
             	helloSerice.sayHello();
             	
             	HelloService helloSerice1 = (HelloService) context.getBean("helloService");
             	helloSerice1.sayHello();
          	
          	
          	//remoteReadServicepostProcessor
          //		RemoteReadService remotePostProcess = (RemoteReadService) context.getBean("remoteReadServicepostProcessor");
          //		System.out.println(remotePostProcess.getCon());
          //		
          	//messageSource
          //		MessageSource messageSource = (MessageSource) context.getBean("messageSource");
          //		System.out.println(messageSource.getMessage("loginfail", new Object[]{"a","b"}, Locale.ENGLISH));
          //		System.out.println(messageSource.getMessage("loginfail", new Object[]{new Date().toString()}, Locale.getDefault()));
          }
          }

2.AOP 主要内容和示例
   
    * 1.AOP概念,应用场景(安全检查,日志记录,监控,事务管理)
    * 2.实现方式(动态代理(所有实现横切关注点的逻辑都得实现InvokationHandler接口),动态字节码增强(生成子类,将横切逻辑加到子类中,不需要实现接口,但是父类不能为final))
    *          spring 默认用动态代理,不能再用字节码(ASM,CGLIB)增强
    * 3. joinpoint(切入点),pointcut(切入点表达式,正则,方法名等),advice(before advice,after advice(after return advice,
    *     after throwing advice, after finally advice,),around advice(filter)),spring AOP 使用proxyfactory完成织入工作。
    * 4. 实现原理:代理模式, 动态代理示例,cglib示例
    * 5. PointCut,JdkRegexpMethodPointcut,NameMatchMethodPointcut
    * 6. advice AfterAdvice BeforeAdvice AspectJAroundAdvice ThrowsAdvice AfterReturningAdvice(批处理方法状态插入数据库)
    * 7. advisor Advisor DefaultPointcutAdvisor order
    * 9. 其他 AspjectJ ajc编译器,编译时织入;JBoss AOP使用自定义的classloader;spring aop使用ProxyFactory  ProxyFactory基于类的代理  AOPProxy AOPProxyFactory
    
    * 10. proxyFactoryBean
    * 11. 自动代理 基于BeanPostProcessor, BeanNameAutoProxyCreator和DefaultAdvisorAutoProxyCreator(针对advisor,自动扫描xml中所有的advisor配置生成代理对象)两个自动代理实现   
    * 12. TargetSource HotSwappableTargetSource(实现数据源替换,热备呼唤) PrototypeTargetSource SingletonTargetSource
    * 
    * 13. aspectj annotation
    
执行SpringContextAOPMain main函数
    
    public class SpringContextAOPMain {


         public static void main(String[] args) {
      		//编码方式,xml配置方式,properties方式
      		//FileSystemXmlApplicationContext ClassPathXmlApplicationContext XmlWebApplicationContext
      //		ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");
      //		HelloService helloSerice = (HelloService) context.getBean("helloService");
      //		helloSerice.sayHello();
      //		
      		
      		//基于proxyFactory 的基于接口代理实现
      		ProxyFactory weaver = new ProxyFactory(new SpringHelloServiceImpl());  
      //		weaver.setInterfaces(interfaces);
      //		weaver.setExposeProxy(true);
      		NameMatchMethodPointcutAdvisor advisor = new NameMatchMethodPointcutAdvisor();  
      		advisor.setMappedName("sayHello");  
      		advisor.setAdvice(new ProxyFactoryProxyAdvisor());  
      		weaver.addAdvisor(advisor);  
      		HelloService proxyObject =(HelloService)weaver.getProxy();  
      		proxyObject.sayHello();
      		System.out.println(proxyObject.getClass()); 
      		
      		//基于proxyFactory的基于类的代理实现
      		ProxyFactory weaver1 = new ProxyFactory(new HelloServiceWithoutInterface());  
      //		weaver.setInterfaces(interfaces);
      		NameMatchMethodPointcutAdvisor advisor1 = new NameMatchMethodPointcutAdvisor();  
      		advisor1.setMappedName("sayHello");  
      		advisor1.setAdvice(new ProxyFactoryProxyAdvisor());  
      		weaver1.addAdvisor(advisor1);  
      		HelloServiceWithoutInterface proxyObject1 =(HelloServiceWithoutInterface)weaver1.getProxy();  
      		proxyObject1.sayHello();
      		System.out.println(proxyObject1.getClass()); 
      		
      		//默认基于接口的代理,可以通过设置下面两个强制基于类的代理
      		weaver.setProxyTargetClass(true);
      		SpringHelloServiceImpl proxyObject2 =(SpringHelloServiceImpl)weaver.getProxy();  
      		proxyObject2.sayHello();
      		System.out.println(proxyObject2.getClass()); 
      		
      		//proxyFactoryBean FactoryBean的proxy代理实现  xml配置AOP
      		ApplicationContext context = new ClassPathXmlApplicationContext("aopbean.xml");
      		HelloService helloService = (HelloService) context.getBean("myproxefactorybean");
      		helloService.sayHello();
      		
      		HelloServiceImpl HelloServiceImpl = (HelloServiceImpl) context.getBean("myproxefactorybean");
      		HelloServiceImpl.sayHello();
      		
      		//自動代理實現
      		HelloService autoProxyHelloService = (HelloService) context.getBean("autoproxyhelloService");
      		autoProxyHelloService.sayHello();
      		
      	}
      }

3. 基于AspectJ的AOP示例,执行AspectjSpringContextAOPMain main函数

    public class AspectjSpringContextAOPMain {

   
      public static void main(String[] args) {
   
   		
      		//proxyFactoryBean FactoryBean的proxy代理实现  xml配置AOP
      		ApplicationContext context = new ClassPathXmlApplicationContext("aopbeanaspectJ.xml");
      		UserService service =(UserService) context.getBean("userService");  
           service.print();  
   		
           NextService NextService =(NextService) context.getBean("NextService");  
           NextService.print();  
   	}
   }


4. spring DAO ,包括JDBCTemplate,集成ibatis和hibernate示例

     * 1.DAO Data acess object
    *  2. DataAccessException 数据库访问如何封装底层各个数据库的异常信息
    * 统一数据访问异常体系 
    * 3. jdbc API JDBCTemplate(封装所有jdbc访问代码,统一格式与规范 SimpleJdbcOperations
    *   SimpleJdbcTemplate,NameParameterJdbcTemplate
    * 4. DataSource DriverManagerDataSource SimpleDriverDataSource c3p0 dbcp
    *  4. 设计模式:模板方法 
    *  5. 基于操作对象的访问方式 SqlQuery,SqlUpdate,SqlCall,SqlFunction
    * 
    *   RDBMSOperation
    * 
    * 
    * 
    * 6.ORM: ibatis,hibernate  hibernateTemplate demo
    * 7. JDO java data object 对象持久化规范  JPA java持久化API
    * 8 扩展 FTPClientTemplate HttpClientTemplate
    * 
    
    
执行 SpringContextDAOMain main函数
   
    public class SpringContextDAOMain {

      
         public static void main(String[] args) throws IOException {
      		ApplicationContext context = new ClassPathXmlApplicationContext("jdbcbean.xml");
      		JdbcTemplateTest jdbcTemplateTest = (JdbcTemplateTest) context.getBean("jdbctest");
      //		jdbcTemplateTest.query();
      //		jdbcTemplateTest.insert();
      //		jdbcTemplateTest.delete();
      //		jdbcTemplateTest.insertBatch();
      //		jdbcTemplateTest.update();
      //		jdbcTemplateTest.updataBatch();
      //		jdbcTemplateTest.create_or_dropTable();
      //		jdbcTemplateTest.callpreparecall();
      		
      		//ibatis
      		//spring xml声明配置方式
      		MyIbatisTest myIbatisTest = (MyIbatisTest) context.getBean("myIbatisTest");
      		myIbatisTest.query();
      		//ibatis 编码方式
      		SqlMapClient sqlmap = SqlMapClientBuilder.buildSqlMapClient(Resources.getResourceAsReader("ibatis/mysql-sqlmap-config.xml"));
      		SqlMapClientTemplate sqlMapClientTemplate = new SqlMapClientTemplate((DataSource) context.getBean("dbcpDataSource"),sqlmap);
      		Map<String,Object> param = new HashMap<String,Object>();
      		param.put("a", 2);
      		List<Dataobject> list = sqlMapClientTemplate.queryForList("test.query", param);
      		System.out.println(list);
      		
      		
      		//hibernate
      		 //从Spring容器中请求SessionFactory
      		ApplicationContext hibernate = new ClassPathXmlApplicationContext("jdbchibernatebean.xml");
              SessionFactory factory =(SessionFactory)hibernate.getBean("sessionFactory");  
              Session session = factory.openSession();  
              //query
              Dataobject data = (Dataobject)session.get(Dataobject.class, 2);  
              System.out.println(data);
              //insert
              Dataobject data1 = new Dataobject();
              data1.setA(14);
              data1.setB("12bbb");
              Serializable s = session.save(data1);
              session.flush();
              System.out.println(s);
              Dataobject data3 = (Dataobject)session.get(Dataobject.class, 12);  
              System.out.println(data3);
              //update
              data1.setA(12);
              data1.setB("123bbb");
              session.update(data1);
              data3 = (Dataobject)session.get(Dataobject.class, 12);  
              System.out.println(data3);
              //session事务
              Transaction transaction = session.beginTransaction();
              session.save(data1);
              session.save(data3);     
              transaction.commit();
              
              session.close();  
      	}
      }
      

5. spring MVC,用eclipse jetty插件直接执行该工程即可。具体查看相关配置web.xml和mv-dispatch-servlet.xml配置,有jsp和velocity支持


    * 1. servlet,jsp, mvc
    * 2. spring mvc; DispatchServlet
    *    HandlerMapping,Controller,ViewResolver,view
    * 3. WebApplicationContextUtils
    * 
    * 4. HandlerMapping  order SimpleUrlHandlerMapping( href="requestpath" -> bean name="/requestpath")  
    *    ControllerClassNameHandlerMapping  DefaultAnnotationHandlerMapping
    *    
    * 5. Controller (AbstractController,MultiActionController),BaseCommandController,AbstractWizardFormController,ParameterizableViewController,
    *    UrlFilenameViewController,ServletForwardingController,ServletWrappingController
    * 
    * 6. ViewResolver InternalResourceViewResolver(默认,jsp),FreeMarkerViewResolver,VelocityViewResolver,JasperReportsViewResolver
    *    XsltViewResolver  MultiPartResolver, order
    *    jsp,velocity demo
    * 
    * 7. view InternalResourceView JstlView VelocityView ...
    * 
    * 8 MultiPartResolver(demo), HandlerInteceptor, HandlerAdaptor,HandlerExceptionResolver,LocalResolver,ThemeResolver
    * 9 HandlerAdaptor  HttpRequestHandlerAdapter SimpleControllerHandlerAdapter AnnotationMethodHandlerAdapter
    * 10 HandlerInteceptor WebContentInterceptor UserRoleAuthorizationInterceptor  HandlerInterceptorAdapter
    * 11 HandlerExceptionResolver SimpleMappingExceptionResolver
    * 12 LocalResolver FixedLocaleResolver SessionLocaleResolver AcceptHeaderLocaleResolver CookieLocaleResolver  LocaleChangeInterceptor
    * 13 ThemeResolver FixedThemeResolver resolveThemeName CookieThemeResolver  ThemeChangeInterceptor
    * 
    * 14 基于注解的mvc
    
6. spring与j2ee的相关集成,示例包括spring mail和quartz,其他方面请查看相关博客介绍


    * 1. jndi  JndiTemplate JndiObjectFactoryBean  http://liuzidong.iteye.com/blog/962841
    * 2. jms JmsTemplate
    * 3. Email
    * 4. 任务调度和线程池  Quartz,ScheduledTimeTask
    * 5. 远程调用方案  RMI,HTTP,HESSION,Burlap,WebService(JAX-RPC,JAX-WS),jms
    *    http://zhwj184.iteye.com/admin/blogs/1683252 rmi
    *    http://zhwj184.iteye.com/admin/blogs/1683626 webservice
    *    http://www.ibm.com/developerworks/cn/java/wa-spring4/ jms
    *    http://chenjumin.iteye.com/blog/234897  hession
    *    http://victor-jan.iteye.com/blog/823550  httpinvoker
    *    http://topmanopensource.iteye.com/blog/350105 burlap

 

0
6
分享到:
评论

相关推荐

    springcloud_入门示例_Hoxton.SR8.zip

    使用的是springcloud的Hoxton.SR8版本,idea工程,下载即可使用。适用于入门快速看效果。整合了eureka(注册中心)、Zuul(网关)、Feign(本地化的远程调研、负载均衡)、hystrix(熔断器)。笔记可查看:...

    Spring Cloud OpenFeign 使用示例

    官方示例工程jdk代码环境为jdk-17,由于我本地环境为jdk-8,所以调整了示例工程中的依赖版本信息,使示例工程能在jdk-8的环境下正常运行。本示例在官方示例的基础上,添加了FeignClient初始化的方式,共计2种供参考...

    spring与maven简单入门示例2018年11月22日博客资源

    在这个"2018年11月22日博客资源"中,你将找到关于如何使用 Maven 来管理 Spring 入门程序的示例。下面我们将深入探讨这两个工具的使用和相互配合。 1. **Maven 的基本概念** - `pom.xml`:Maven 的核心配置文件,...

    spring 学习 springcore例子

    Spring Core是Spring框架的基础部分,它提供了核心工具类、容器和依赖注入功能。 在学习Spring Core时,我们需要理解以下几个关键概念: 1. **Spring容器**:Spring框架的核心是IoC(Inversion of Control)容器,...

    spring mvc入门示例

    **Spring MVC 入门示例** Spring MVC 是一个基于 Java 的模型-视图-控制器(MVC)架构,用于构建动态 Web 应用程序。它提供了处理 HTTP 请求、数据绑定、异常处理等功能,使得开发者可以更专注于业务逻辑,而不是...

    spring 学习

    由于提供的文件内容中存在大量重复的网址信息,并没有实际的教学内容或者相关知识点,我将从标题“spring 学习”出发,结合描述“通过搭建基本的工程,从中学习spring的原理”来详细阐述Spring框架的相关知识点。...

    SpringBoot+Spring+Mybatis项目工程Demo示例源代码.zip

    《SpringBoot+Spring+Mybatis项目工程Demo示例源代码》是一个典型的Java后端开发框架集成实例,旨在为开发者提供一个快速构建新项目的基础模板。这个压缩包包含了一个基于Spring Boot、Spring和Mybatis的简单工程...

    springboot示例工程

    这个示例工程是学习和实践 SpringBoot 的绝佳资源。通过阅读和理解代码,你可以深入了解 SpringBoot 如何简化开发流程,并且掌握如何构建实际项目。无论是初学者还是经验丰富的开发者,都能从中受益匪浅。

    Spring入门简洁工程

    "Spring入门简洁工程"是一个专为初学者设计的项目,旨在帮助开发者快速掌握Spring的核心概念和基本用法。 在Spring框架中,配置文件是至关重要的组成部分,它通常以XML格式存在,如`applicationContext.xml`。这个...

    达内ssh整合学习示例工程1

    这个“达内ssh整合学习示例工程1”提供了对SSH整合基础操作的实践教程,帮助开发者理解如何正确配置这三个框架并实现基本的登录功能。 1. **Spring框架**:Spring是一个全面的Java应用框架,它提供了依赖注入(DI)...

    spring boot入门教程

    ### Spring Boot 入门教程详解 #### Spring Boot 框架概述 Spring Boot 是由 Pivotal 团队提供的全新框架,旨在简化新 Spring 应用的初始搭建以及开发过程。该框架使用了特定的方式(习惯优于配置)来简化整个 ...

    jms整合spring工程

    **正文** ...总的来说,"jms整合spring工程"是一个实用的示例,帮助开发者理解和实践在Spring中使用JMS与ActiveMQ进行消息通信。通过深入研究该项目,可以掌握JMS和Spring集成的关键技术和最佳实践。

    SpringMVC+Spring+Mybatis项目工程Demo示例源代码.zip

    这是一个基于Java技术栈的Web开发项目模板,使用了SpringMVC、Spring和Mybatis三个核心框架,被命名为"SpringMVC+Spring+Mybatis项目工程Demo示例源代码.zip"。这个压缩包提供了SSM(Spring、SpringMVC、Mybatis)...

    Spring Boot 学习笔记完整教程.pdf

    - HelloWorld示例:通过新建Maven Java工程,添加Spring Boot Maven依赖,创建主程序类,通过简单配置来运行一个Web应用。 - 返回JSON数据:Spring Boot可以集成Jackson等JSON转换框架来简化数据的序列化和反序列化...

    Spring Boot 学习示例Demo,基于 Spring Boot 2.4 + Gradle 构建。主要使用 K.zip

    对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】: 有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 鼓励下载和使用,并欢迎大家互相学习,共同...

    spring整合activemq的maven工程

    在Maven工程中,我们首先需要在`pom.xml`文件中添加相关的依赖,包括Spring的`spring-context`、`spring-jms`和ActiveMQ的客户端库。例如: ```xml &lt;groupId&gt;org.springframework &lt;artifactId&gt;spring-context ...

    Struts2 示例工程

    Struts2是一个强大的Java web应用程序框架,它基于Model-View-...同时,这也为进阶学习如Spring集成、国际化、Ajax支持等提供了基础。在实际工作中,掌握Struts2能提升开发效率,确保代码的整洁性和可维护性。

    Spring Boot学习笔记

    #### 一、Spring Boot 入门 ##### 1. Spring Boot 简介 Spring Boot 是一款简化 Spring 应用开发的框架,它旨在简化传统 Spring 应用复杂的配置过程,使开发者能够更加专注于业务逻辑的实现。Spring Boot 提供了开...

    CXF webSerivces开发示例工程

    总之,CXF WebServices开发示例工程是一个全面的学习资源,涵盖了从基础的JavaBean到复杂的数据结构如List和Map的使用,以及服务的创建和部署。通过深入研究这个示例,开发者可以掌握CXF的核心特性,提高在企业级...

Global site tag (gtag.js) - Google Analytics