Code Monkey home page Code Monkey logo

springdemo's Introduction

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();
  		
  	}
  }
  1. 基于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();  
    

    } }

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

    • 1.DAO Data acess object
      1. DataAccessException 数据库访问如何封装底层各个数据库的异常信息
    • 统一数据访问异常体系
      1. jdbc API JDBCTemplate(封装所有jdbc访问代码,统一格式与规范 SimpleJdbcOperations
    • SimpleJdbcTemplate,NameParameterJdbcTemplate
      1. DataSource DriverManagerDataSource SimpleDriverDataSource c3p0 dbcp
      1. 设计模式:模板方法
      1. 基于操作对象的访问方式 SqlQuery,SqlUpdate,SqlCall,SqlFunction
    • RDBMSOperation
    • 6.ORM: ibatis,hibernate hibernateTemplate demo
      1. 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();  
  	}
  }
  1. spring MVC,用eclipse jetty插件直接执行该工程即可。具体查看相关配置web.xml和mv-dispatch-servlet.xml配置,有jsp和velocity支持

      1. servlet,jsp, mvc
      1. spring mvc; DispatchServlet
    • HandlerMapping,Controller,ViewResolver,view
      1. WebApplicationContextUtils
      1. HandlerMapping order SimpleUrlHandlerMapping( href="requestpath" -> bean name="/requestpath")
    • ControllerClassNameHandlerMapping DefaultAnnotationHandlerMapping
      1. Controller (AbstractController,MultiActionController),BaseCommandController,AbstractWizardFormController,ParameterizableViewController,
    • UrlFilenameViewController,ServletForwardingController,ServletWrappingController
      1. ViewResolver InternalResourceViewResolver(默认,jsp),FreeMarkerViewResolver,VelocityViewResolver,JasperReportsViewResolver
    • XsltViewResolver MultiPartResolver, order
    • jsp,velocity demo
      1. 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
  2. spring与j2ee的相关集成,示例包括spring mail和quartz,其他方面请查看相关博客介绍

springdemo's People

Contributors

zhwj184 avatar

Watchers

James Cloos avatar liuwenpeng avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.