java spring| 耗时:0.496秒|98355条结果

Spring(二)SpringJavaBean的管理

部分与第一篇重复的内容省掉了。 用实体类保存JavaBean的配置信息 package test.spring.entity; public class Bean { private String id; private String classPath; public Bean(String
http://www.itnose.net/detail/6323879.html 2015-07-22 21:32   [Spring]

java Spring 大神

### 使用SSH在XML中配置是没有问题的,转成注解时就出现了如下问题,求大神告知到如何解决 ``` 严重: Context initialization failed java.lang.IllegalArgumentException at org.springframework.asm.ClassReader.<init>(Unknown Source) at org.springframework.asm.ClassReader.<init>(Unknown Source) at org.springframework.asm.ClassReader.<init>(Unknown Source) at org.springframework.core.type.classreading.SimpleMetadataReader.<init>(SimpleMetadataReader.java:52) at org.springframework.core.type.classreading.SimpleMetadataReaderFactory.getMetadataReader(SimpleMetadataReaderFactory.java:80) at org.springframework.core.type.classreading.CachingMetadataReaderFactory.getMetadataReader(CachingMetadataReaderFactory.java:101) at org.springframework.core.type.classreading.SimpleMetadataReaderFactory.getMetadataReader(SimpleMetadataReaderFactory.java:76) at org.springframework.context.annotation.ConfigurationClassParser.getImports(ConfigurationClassParser.java:298) at org.springframework.context.annotation.ConfigurationClassParser.getImports(ConfigurationClassParser.java:300) at org.springframework.context.annotation.ConfigurationClassParser.getImports(ConfigurationClassParser.java:300) at org.springframework.context.annotation.ConfigurationClassParser.doProcessConfigurationClass(ConfigurationClassParser.java:230) at org.springframework.context.annotation.ConfigurationClassParser.processConfigurationClass(ConfigurationClassParser.java:153) at org.springframework.context.annotation.ConfigurationClassParser.parse(ConfigurationClassParser.java:130) at org.springframework.context.annotation.ConfigurationClassPostProcessor.processConfigBeanDefinitions(ConfigurationClassPostProcessor.java:285) at org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry(ConfigurationClassPostProcessor.java:223) at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:630) at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:461) at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:383) at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:283) at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:112) at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:5068) at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5584) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:147) at org.apache.catalina.startup.HostConfig.reload(HostConfig.java:1548) at org.apache.catalina.startup.HostConfig.checkResources(HostConfig.java:1512) at org.apache.catalina.startup.HostConfig.check(HostConfig.java:1748) at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:333) at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117) at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90) at org.apache.catalina.core.ContainerBase.backgroundProcess(ContainerBase.java:1371) at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1543) at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1553) at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1521) at java.lang.Thread.run(Thread.java:745) 五月 07, 2016 8:47:33 下午 org.apache.catalina.core.StandardContext listenerStart 严重: Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener java.lang.IllegalArgumentException at org.springframework.asm.ClassReader.<init>(Unknown Source) at org.springframework.asm.ClassReader.<init>(Unknown Source) at org.springframework.asm.ClassReader.<init>(Unknown Source) at org.springframework.core.type.classreading.SimpleMetadataReader.<init>(SimpleMetadataReader.java:52) at org.springframework.core.type.classreading.SimpleMetadataReaderFactory.getMetadataReader(SimpleMetadataReaderFactory.java:80) at org.springframework.core.type.classreading.CachingMetadataReaderFactory.getMetadataReader(CachingMetadataReaderFactory.java:101) at org.springframework.core.type.classreading.SimpleMetadataReaderFactory.getMetadataReader(SimpleMetadataReaderFactory.java:76) at org.springframework.context.annotation.ConfigurationClassParser.getImports(ConfigurationClassParser.java:298) at org.springframework.context.annotation.ConfigurationClassParser.getImports(ConfigurationClassParser.java:300) at org.springframework.context.annotation.ConfigurationClassParser.getImports(ConfigurationClassParser.java:300) at org.springframework.context.annotation.ConfigurationClassParser.doProcessConfigurationClass(ConfigurationClassParser.java:230) at org.springframework.context.annotation.ConfigurationClassParser.processConfigurationClass(ConfigurationClassParser.java:153) at org.springframework.context.annotation.ConfigurationClassParser.parse(ConfigurationClassParser.java:130) at org.springframework.context.annotation.ConfigurationClassPostProcessor.processConfigBeanDefinitions(ConfigurationClassPostProcessor.java:285) at org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry(ConfigurationClassPostProcessor.java:223) at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:630) at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:461) at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:383) at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:283) at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:112) at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:5068) at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5584) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:147) at org.apache.catalina.startup.HostConfig.reload(HostConfig.java:1548) at org.apache.catalina.startup.HostConfig.checkResources(HostConfig.java:1512) at org.apache.catalina.startup.HostConfig.check(HostConfig.java:1748) at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:333) at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117) at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90) at org.apache.catalina.core.ContainerBase.backgroundProcess(ContainerBase.java:1371) at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1543) at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1553) at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1521) at java.lang.Thread.run(Thread.java:745) 五月 07, 2016 8:47:33 下午 org.apache.catalina.core.StandardContext startInternal 严重: One or more listeners failed to start. Full details will be found in the appropriate container log file 五月 07, 2016 8:47:33 下午 org.apache.catalina.core.StandardContext startInternal 严重: Context [/shop3] startup failed due to previous errors 五月 07, 2016 8:47:33 下午 org.apache.catalina.core.ApplicationContext log 信息: Closing Spring root WebApplicationContext 五月 07, 2016 8:47:33 下午 org.springframework.context.support.AbstractApplicationContext doClose 信息: Closing Root WebApplicationContext: startup date [Sat May 07 20:47:32 CST 2016]; root of context hierarchy 五月 07, 2016 8:47:33 下午 org.springframework.context.support.AbstractApplicationContext doClose 警告: Exception thrown from ApplicationListener handling ContextClosedEvent java.lang.IllegalStateException: ApplicationEventMulticaster not initialized - call 'refresh' before multicasting events via the context: Root WebApplicationContext: startup date [Sat May 07 20
http://www.itnose.net/detail/6499896.html 2016-05-07 22:15   [Spring]

[Java]Spring入门

  阅读目录 回顾   1 控制反转IOC\依赖注入DI,因为翻译的不同,因此有两个名字。   2 AOP面向切面编程   那么下面看下它的编码过程!   最后我们写一个简单的依赖注入的小样例! 回到顶部 回顾   1 JDK安装   2 Struts2简单入门示例 前言   作为入门级的记录帖,没有过多的技术含量,简单的搭建配置框架而已。这次讲到spring,这个应该是SSH中的重量级框架,它主要包含两个内容:控制反转\依赖注入,和AOP面向切面编程。 回到顶部   1 控制反转IOC\依赖注入DI,因为翻译的不同,因此有两个名字。   控制反转意思就是说,当我们调用一个方法或者类时,不再有我们主动去创建这个类的对象,控制权交给别人(spring)。   依赖注入意思就是说,spring主动创建被调用类的对象,然后把这个对象注入到我们自己的类中,使得我们可以使用它。      举个简单的例子,程序猿加班了一个月,很累,想要放松下,于是去找人吃“麻辣烫”。   不使用spring的传统做法是,我们自己通过陌陌微信等神器,主动寻找目标,花费大量人力物力,达成协议后,申请“场所”办正事。   而使用spring的做法就很方便了,我们直接去某个场所,那个地方直接就有目标候着!   这是多么神奇的功能啊!   (此图涉及暴力,18岁以下自行负责)   回到顶部   2 AOP面向切面编程   我们把一个方法看做是一个切面,在这个切面的前后或者周围,都可以设置其他的处理方法,进行一些特殊的处理。   比如一个“吃蛋糕”的方法,在这个方法前需要“拆包装”,方法后需要“打扫卫生”,都可以通过这种编程方式来实现。   回到顶部   那么下面看下它的编码过程!   1 首先我们需要一个bean,用某种方法(设置注入需要有setter函数,构造注入需要有构造函数,相应的bean.xml配置文件也会不同)设定注入方式。   2 bean.xml,设置bean与类的关系,并关联默认的注入值。   3 获取bean.xml文件,创建实例对象,直接调用方法。   可以看到,我们开发的程序只有第三步的“创建实例对象,直接调用方法”,并没有为他进行初始化等工作,就可以直接调用它的方法,获取它的值。其实spring在程序初始化的时候,就会为我们把bean对应的对象注入进来,帮助我们完成初始化,因此我们只要通过一个引用对象,就可以直接调用了。   回到顶部   最后我们写一个简单的依赖注入的小样例!   1 需要的jar包和文件结构   jar包下载地址:http://pan.baidu.com/s/1sjDbzrR      2 bean.xml配置文件,放在src目录下   1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 3 xmlns="http://www.springframework.org/schema/beans" 4 xsi:schemaLocation="http://www.springframework.org/schema/beans 5 http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"> 6 <bean id="person" class="com.test.bean.Person"> 7 <property name="name" value="xingoo"/> 8 <property name="age" value="12"/> 9 </bean> 10 </beans>     3 Person类,这里使用的是set设置注入方式 package com.test.bean; public class Person { private String name; private int age; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public void info(){ System.out.println("一起来吃麻辣烫!"); System.out.println("name:"+getName()+" age:"+getAge()); } }   4 test类 package testSpring; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import com.test.bean.Person; public class test { public static void main(String[] args){ ApplicationContext ctx = new ClassPathXmlApplicationContext("bean.xml");//读取bean.xml中的内容 Person p = ctx.getBean("person",Person.class);//创建bean的引用对象 p.info(); } }   5 执行结果   版权声明:本文为博主原创文章,未经博主允许不得转载。
http://www.itnose.net/detail/6386097.html 2015-10-13 11:05   [Spring]

Java Spring AOP用法

Java Spring AOP用法 Spring AOP Java web 环境搭建Java web 项目搭建Java Spring IOC用法spring提供了两个核心功能,一个是IoC(控制反转),另外一个便是Aop(面向切面编程),IoC有助于应用对象之间的解耦,AOP则可以实现横切关注点(如日志、安全、缓存和事务管理)与他们所影响的对象之间的解耦。 1.简介 AOP主要包含了通知、切点和连接点等术语,介绍如下 通知(Advice)通知定义了切面是什么以及何时调用,何时调用包含以下几种 **Before** 在方法被调用之前调用通知 After 在方法完成之后调用通知,无论方法执行是否成功 After-returning 在方法成功执行之后调用通知 After-throwing 在方法抛出异常后调用通知 Around 通知包裹了被通知的方法,在被通知的方法调用之前和调用之后执行自定义的行为 切点(PointCut)通知定义了切面的什么和何时,切点定义了何处,切点的定义会匹配通知所要织入的一个或多个连接点,我们通常使用明确的类的方法名称来指定这些切点,或是利用正则表达式定义匹配的类和方法名称来指定这些切点。切点的格式如下 execution(* com.ganji.demo.service.user.UserService.GetDemoUser (..) ) 连接点(JoinPoint)连接点是在应用执行过程中能够插入切面的一个点,这个点可以是调用方法时,抛出异常时,甚至是修改一个字段时,切面代码可以利用这些连接点插入到应用的正常流程中,并添加新的行为,如日志、安全、事务、缓存等。 现阶段的AOP框架AOP框架除了Spring AOP之外,还包括AspectJ、JBoss AOP;上述框架的区别是Spring AOP只支持到方法连接点,另外两个还支持字段和构造器连接点。 2.用法 同依赖注入一样,AOP在spring中有两种配置方式,一是xml配置的方式,二是自动注解的模式。 2.1 xml中声明切面 2.1.1 AOP配置元素 在xml中,我们使用如下AOP配置元素声明切面 AOP配置元素 描述 <aop:advisor> 定义AOP通知器 <aop:after> 定义AOP后置通知(不管该方法是否执行成功) <aop:after-returning> 在方法成功执行后调用通知 <aop:after-throwing> 在方法抛出异常后调用通知 <aop:around> 定义AOP环绕通知 <aop:aspect> 定义切面 <aop:aspect-autoproxy> 定义@AspectJ注解驱动的切面 <aop:before> 定义AOP前置通知 <aop:config> 顶层的AOP配置元素,大多数的 包含在 元素内 <aop:declare-parent> 为被通知的对象引入额外的接口,并透明的实现 <aop:pointcut> 定义切点 2.1.2 定义切面 我们在service层添加com.ganji.demo.service.aspect.XmlAopDemoUserLog类,里面实现了拦截方法,具体如下 package com.ganji.demo.service.aspect; import org.aspectj.lang.ProceedingJoinPoint; /** * Created by admin on 2015/9/2. */ public class XmlAopDemoUserLog { // 方法执行前通知 public void beforeLog() { System.out.println("开始执行前置通知 日志记录"); } // 方法执行完后通知 public void afterLog() { System.out.println("开始执行后置通知 日志记录"); } // 执行成功后通知 public void afterReturningLog() { System.out.println("方法成功执行后通知 日志记录"); } // 抛出异常后通知 public void afterThrowingLog() { System.out.println("方法抛出异常后执行通知 日志记录"); } // 环绕通知 public Object aroundLog(ProceedingJoinPoint joinpoint) { Object result = null; try { System.out.println("环绕通知开始 日志记录"); long start = System.currentTimeMillis(); //有返回参数 则需返回值 result = joinpoint.proceed(); long end = System.currentTimeMillis(); System.out.println("总共执行时长" + (end - start) + " 毫秒"); System.out.println("环绕通知结束 日志记录"); } catch (Throwable t) { System.out.println("出现错误"); } return result; } } 2.1.3 xml声明切面并调用 我们在web层,web-inf/dispatcher-servlet.xml中定义切面,具体如下 <!--定义切面 指定拦截方法时 做什么--> <bean id="xmlAopDemoUserLog" class="com.ganji.demo.service.aspect.XmlAopDemoUserLog"></bean> <aop:config> <aop:aspect ref="xmlAopDemoUserLog"> <!--指定切面--> <!--定义切点--> <aop:pointcut id="logpoint" expression="execution(* com.ganji.demo.service.user.UserService.GetDemoUser(..))"></aop:pointcut> <!--定义连接点--> <aop:before pointcut-ref="logpoint" method="beforeLog"></aop:before> <aop:after pointcut-ref="logpoint" method="afterLog"></aop:after> <aop:after-returning pointcut-ref="logpoint" method="afterReturningLog"></aop:after-returning> <aop:after-throwing pointcut-ref="logpoint" method="afterThrowingLog"></aop:after-throwing> </aop:aspect> </aop:config> 在controller下调用,调用具体如下 DemoUserEntity demoUser=userService.GetDemoUser(1); 这是运行起来 我们将看到打印出如下日志 开始执行前置通知 日志记录开始执行后置通知 日志记录方法成功执行后通知 日志记录 2.1.4 小结 如果通过xml配置,我们还可以实现环绕通知,环绕通知的目的是把前置通知和后置通知的信息共享起来。同时还可以为通知传递方法的参数,在切面拦截中验证参数的有效性。 2.2 自动注解AOP 在上述2.1中我们通过xml配置的形式 实现了AOP编程,现在我们通过不配置xml,配置注解的形式实现AOP。 2.2.1 配置自动代理 使用配置注解,首先我们要将切面在spring上下文中声明成自动代理bean,我们需要在web层的web-inf/dispatcher-servlet.xml文件中配置如下一句话即可 <aop:aspectj-autoproxy /> 当然我们需要在xml的根目录beans下引用aop的命名空间和xsi xmlns:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation=" http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd" 2.2.2 使用@Aspect注解 声明一个切面,只需要在类名上添加@Aspect属性即可,具体的连接点,我们用@Pointcut和@Before、@After等标注。具体如下在声明前 我们需要依赖配置pom <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjrt</artifactId> <version>1.6.11</version> </dependency> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> <version>1.6.11</version> </dependency> 声明切面类,包含了注解@Aspect以及何时(如@Before)执行通知 package com.ganji.demo.service.aspect; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.*; import org.springframework.stereotype.Service; /** * Created by admin on 2015/9/2. */ @Aspect @Service public class XmlAopDemoUserLog { // 配置切点 及要传的参数 @Pointcut("execution(* com.ganji.demo.service.user.UserService.GetDemoUser(..)) && args(id)") public void pointCut(int id) { } // 配置连接点 方法开始执行时通知 @Before("pointCut(id)") public void beforeLog(int id) { System.out.println("开始执行前置通知 日志记录:"+id); } // 方法执行完后通知 @After("pointCut(id)") public void afterLog(int id) { System.out.println("开始执行后置通知 日志记录:"+id); } // 执行成功后通知 @AfterReturning("pointCut(id)") public void afterReturningLog(int id) { System.out.println("方法成功执行后通知 日志记录:"+id); } // 抛出异常后通知 @AfterThrowing("pointCut(id)") public void afterThrowingLog(int id) { System.out.println("方法抛出异常后执行通知 日志记录"+id); } // 环绕通知 @Around("pointCut(id)") public Object aroundLog(ProceedingJoinPoint joinpoint,int id) { Object result = null; try { System.out.println("环绕通知开始 日志记录"+id); long start = System.currentTimeMillis(); //有返回参数 则需返回值 result = joinpoint.proceed(); long end = System.currentTimeMillis(); System.out.println("总共执行时长" + (end - start) + " 毫秒"); System.out.println("环绕通知结束 日志记录"); } catch (Throwable t) { System.out.println("出现错误"); } return result; } } 2.2.3 总结 按照上述两个步骤,使用注解实现Aop即可,这里依赖了IOC。
http://www.itnose.net/detail/6365249.html 2015-09-05 01:11   [J2SE]

Java Spring IOC用法

Java Spring IOC用法 Spring IoC 在前两篇文章中,我们讲了java web环境搭建 和 java web项目搭建,现在看下spring ioc在java中的运用,开发工具为Intellij Idea。 1.简介 IoC(Inversion of Control)通常称为控制反转,是Spring框架的核心。即通过Spring容器控制对象之间的依赖关系,而不是对象自己通过new的方式去创建依赖的对象,相对于主动去创建对象,这种失去对对象的控制便叫做控制反转,控制反转用另一种角度描述或者更好的一种理解方式来讲,便是DI(Dependency Injection)依赖注入,对象只需关注业务逻辑本身即可,而不需关注依赖的对象从哪里来,交给容器注入即可,从而降低程序之间的耦合度。 2.用法 依赖注入在spring中有两种配置方式,一是xml配置Bean的方式,二是自动装配检测Bean 2.1 xml配置Bean 2.1.1 创建Spring配置我们在web层,web-inf/dispatcher-servlet.xml中注入service层的实现类,加入如下代码 <bean id="demoUserService" class="com.ganji.demo.service.user.DemoUserServiceImpl" /> 2.1.2 在web层controller下调用我们在类里声明对象,并在方法里调用,这里我们的service层接口类可以声明为私有属性, 程序可通过 at Inject自动搜索xml中的bean配置 ,注入依赖。 // 声明对象 DemoUserServiceImpl实现DemoUserService接口 @Inject private DemoUserService demoUserService; @RequestMapping(value="/index", method = {RequestMethod.GET}) public ModelAndView index(){ DemoUserEntity demoUser=demoUserService.GetDemoUser(1); modelAndView.addObject("demoUser", demoUser); modelAndView.setViewName("home"); return modelAndView; } 我们在属性前加了@Inject,这里依赖javax.inject.Inject包 ,在模块pom里加入如下依赖即可 <dependency> <groupId>javax.inject</groupId> <artifactId>javax.inject</artifactId> </dependency> 2.1.3 属性的依赖注入 如果我们想在service层依赖注入调用dao层对象操作数据库,则跟service层类似,我们在web层的web-inf/dispatcher-servlet.xml注入dao层的实现,加入如下代码 <bean id="demoUserDao" class="com.ganji.demo.dao.gcrm.hibernate.DemoUserDaoHibernate"></bean> <bean id="demoUserService" class="com.ganji.demo.service.user.DemoUserServiceImpl" autowire="byType"> <property name="demoUserDao" ref="demoUserDao"></property> </bean> ref指像bean的实现类,如果是值类型或String类型可以用value指定,设定值即可,如value=5。在service层,我们可以在DemoUserServiceImpl层里声明demoUserDao私有属性,并公开属性set方法,然后调用 //声明属性 private DemoUserDao demoUserDao; //通过属性的set方法,注入对象 public void setDemoUserDao(DemoUserDao demoUserDao) { this.demoUserDao=demoUserDao; } public DemoUserEntity GetDemoUser(int id) { return demoUserDao.getDemoUser(id); } 2.1.4 构造器注入 构造器注入类似于属性注入,在xml中用constructor-arg来指定,这里我们在web层的web-inf/dispatcher-servlet.xml配置如下 <bean id="demoUserService" class="com.ganji.demo.service.user.DemoUserServiceImpl" autowire="byType"> <constructor-arg name="demoUserDao" ref="demoUserDao"></constructor-arg> <constructor-arg name="userName" value="张三"></constructor-arg> </bean> 在service层,我们创建构造函数 private DemoUserDao demoUserDao; private String userName; public DemoUserServiceImpl(DemoUserDao demoUserDao,String userName) { this.demoUserDao=demoUserDao; this.userName=userName; } //在方法里既可以调用了,如下代码 public DemoUserEntity GetDemoUser(int id) { System.out.println("execute service getdemouser "+userName); return demoUserDao.getDemoUser(id); } 2.1.5 小结如果我们不想在xml中配置属性注入或者构造器注入,我们可以在声明的属性上, 添加 at Inject注解 ,类似2.1.2中demoUserService的实现,这样Spring框架会自动搜索bean对应的实现类,可以在bean处设置根据名称或类型,即autowire="byType" or autowire="byName",也可以全局设置,即在根目录beans下面声明default-autowire="byName",具体如下。 <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" default-autowire="byName" > 2.2自动装配检测Bean 如果每个实现类都要配置bean元素的话,项目如果很大的情况下,太多的bean,xml文件的bean管理配置就成了一个问题,很庆幸的事,spring提供了自动装配检测bean注入依赖的功能。 2.2.1 自动检测标注bean 我们依赖<context:component-scan>查找使用注解所标注的类,这些注解如下 @Component --通用的构造性注解,标识该类为Spring组件 @Controller --标识将该类定义为Spring MVC Controller 这里我们用在web层 @Service --标识将该类定义为服务,这里我们用在Service层 @Repository --标识将该类定义为数据仓库,这里我们用在Dao层 具体用法如下图示例 web层调用@Controllerpublic class HelloWorldController { service层调用@Servicepublic class DemoUserServiceImpl implements DemoUserService { dao层调用@Repositorypublic class DemoUserDaoHibernate implements DemoUserDao { 注解后,我们需要在web层的web-inf/dispatcher-servlet.xml配置组件扫描<context:component-scan>,分别扫描web、service。dao层,具体如下 <!-- 开启controller注解支持 --> <!-- use-default-filters="false" 只扫描指定的注解 --> <context:component-scan base-package="com.ganji.demo.web.controller" use-default-filters="false"> <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller" /> </context:component-scan> <!--服务层自动依赖注入--> <context:component-scan base-package="com.ganji.demo.service"> <context:include-filter type="annotation" expression="org.springframework.stereotype.Service" /> </context:component-scan> <!--Dao层依赖注入--> <context:component-scan base-package="com.ganji.demo.dao"> <context:include-filter type="annotation" expression="org.springframework.stereotype.Repository" /> </context:component-scan> 同时,我们需要在xml命名空间里加入context支持,xmlns:context="http://www.springframework.org/schema/context"和相应的xsi具体如下 <?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.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd" default-autowire="byName" > 2.2.2 使用自动注入的bean 上一步配置好后,我们只需要声明调用对象的属性即可,如下web层如下 // 声明对象 DemoUserServiceImpl实现DemoUserService接口 @Inject private DemoUserService demoUserService; @RequestMapping(value="/index", method = {RequestMethod.GET}) public ModelAndView index(){ DemoUserEntity demoUser=demoUserService.GetDemoUser(1); modelAndView.addObject("demoUser", demoUser); modelAndView.setViewName("home"); return modelAndView; } service层如下 @Inject private DemoUserDao demoUserDao; public DemoUserEntity GetDemoUser(int id) { return demoUserDao.getDemoUser(id); } 2.2.3 总结 按2.2.1和2.2.2配置操作后,即可实现自动检查依赖注入bean,不用在xml中配置繁琐的bean元素,由框架通过反射自动寻找对象实现。
http://www.itnose.net/detail/6362224.html 2015-08-31 11:07   [J2SE]

spring实现java的邮件发送

   由于项目需要使用邮件发送,所以最近学习了一下利用spring机制来发送邮件。这里大致记录一下其实现。   首先,需要在项目中导入两个包,一个是mailapi-XX.jar,一个是smtp-xx.jar。其中xx代表版本号。倘若使用maven更简单了
http://www.itnose.net/detail/6333525.html 2015-08-01 09:10   [Spring]

java spring mvc框架

我之前是做.net开发的,完全不懂Java,现在在学Java的web开发,问一下各位Java maven怎么搭建spring mvc架构,各位有没有什么资料是教这方面的?最好是比较入门的教程,从打开eclipse到创建项目,搭建spring mvc,如何引用
http://www.itnose.net/detail/6302814.html 2015-06-23 19:00   [JAVA程序员交流]

Spring Remoting 的 Thrift 实现(Java

Spring Remoting 的 Thrift 实现(Java)。 Usage Server <bean name="/api/appService" class="
http://www.itnose.net/detail/6301716.html 2015-06-22 02:27   [Spring]

Java Spring删除cookie

JavaSpring删除cookie web开发中,在controller上需要将浏览器的某个cookie删除,我们会期望response参数里面会有个removeCookie方法,但悲剧的是没有。response里面只有addCookie方法。 如果我们想删除cookie,只能利用
http://www.itnose.net/detail/6217972.html 2015-03-05 09:18   [Spring]

Scripting Java(二):使用Spring容器

前面我们已经知道了怎么在Java中执行脚本语言,今天,以Groovy为栗,来看下怎么在脚本里面使用Spring容器。 Bindings 最简单的方式,直接将ApplicationContext丢到ScriptEngine的上下文环境,也就是Bindings里面,这样脚本里面就可以直接使用
http://www.itnose.net/detail/6208140.html 2015-02-07 00:28   [Spring]

mongodb java spring data

/blog/175525 项目背景 开始用C#完成项目,采用mongodb数据库,客户要求完成一个b\s版本的对应程序。 b\s版本采用java语言,数据库底层需要完成对mongodb的CRUD操作。 调研了下,最后决定还是用spring data mongodb来完成这个任务,具体的开发配置不做赘述
http://www.itnose.net/detail/6171667.html 2014-12-12 11:05   [MongoDB]

java获取spring的bean

/**  * 加载spring配置文件,提供getBean接口.  * @author xiongzy  *  */ public final class BeanLocator {     private static final Logger logger = Logger.getLogger(BeanLocator.class);     /**      * 单实例.      */     private static BeanLocator instance = null;          /**      * 缺省配置文件名称.      */     private static final String DEFAULT_CONFIGURATION_FILENAME = "spring/applicationContext.xml";          /**      * 加载配置文件名.      */     private static String configurationFileName = null;          /**      * spring环境.      */     private ApplicationContext applicationContext = null;     /**      * 单例模式.      * @return 接口      */     public static BeanLocator getInstance() {         if (instance == null) {             // 同步控制代码, 防止初始化多次.             synchronized(logger) {                 if (instance == null) {                     instance = new BeanLocator();                 }             }         }         return instance;     }     /**      * 设置配置文件名.      * @param fileName 配置文件名      */     public static void setConfigurationFileName(String fileName) {         configurationFileName = fileName;     }          /**      * 私有构造.      */     private BeanLocator() {         if (configurationFileName == null || configurationFileName.length() == 0) {             configurationFileName = DEFAULT_CONFIGURATION_FILENAME;   
http://www.itnose.net/detail/6093052.html 2014-08-14 18:25   [Spring]

java时断时续之????spring

(Dependency Injection)和控制反转(Inversion of Control)二者是同一个概念。具体含义是:当某个角色(可能是一个Java实例,调用者)需要另一个角色(另一个Java实例,被调用者)的协助时,在传统的程序设计过程中,通常由调用者来创建被调用者的实例。但在Spring
http://www.itnose.net/detail/506121.html 2014-01-26 14:08   [Spring]

spring 笔记(java版)

; = (Action)factory.getBean( " TheAction " ); 3、ApplictionContext:提供更多于应用架构相整合的特性,其中包括:国际化支持、资源访问、事件传播、多实例加载。 对于Web应用,spring可通过配置Web。xml加载
http://www.itnose.net/detail/491227.html 2014-01-24 15:03   [Spring]

  1  2  3  4  5 下一页>