在Spring的ApplicationContext中为了避免客户端代码直接引用目标Bean,可以将目标Bean定义成内部Bean,我在其中是这样配置的
<bean id="service"
class="org.springframework.aop.framework.ProxyFactoryBean">
<property name="proxyInterfaces">
<value>org.spring.aop.target.TestService</value>
</property>
<property name="target">
<bean class="org.spring.aop.advice.AuthorityInterceptor"/>
<!-- <ref local="serviceTarget" /> -->
</property>
<property name="interceptorNames">
<list>
<value>authorityInterceptor</value>
</list>
</property>
</bean>
出现如下错误:
Exception in thread "main" org.springframework.aop.AopInvocationException: AOP configuration seems to be invalid: tried calling method [public abstract void org.spring.aop.target.TestService.view()] on target [org.spring.aop.advice.AuthorityInterceptor@1193779]; nested exception is java.lang.IllegalArgumentException: object is not an instance of declaring class
Caused by: java.lang.IllegalArgumentException: object is not an instance of declaring class
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:318)
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:203)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:162)
at org.spring.aop.advice.AuthorityInterceptor.invoke(AuthorityInterceptor.java:21)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:185)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:209)
at $Proxy0.view(Unknown Source)
at org.spring.aop.target.TestActionImpl.view(TestActionImpl.java:15)
at org.spring.aop.main.Test.main(Test.java:17)
请指教
分享到:
相关推荐
- 使用`ref`属性:直接在`<property>`标签中通过`ref`属性引用另一个bean,如`<property name="bean3" ref="bean3"/>`。 - 使用`<ref>`标签:与`ref`属性类似,如`<property name="bean4"><ref bean="bean4"/>...
`id`属性定义Bean的脚本变量名,`type`指定Bean的类型,`value`或`name`属性定义Bean的值或引用已存在的Bean,`propertyName`用于指定Bean的属性,`scope`定义源Bean的作用域,`toScope`定义目标Bean的作用域。...
它避免了每次事件触发时对所有监听器进行循环检查,而是使用了直接引用,从而减少了内存消耗和CPU使用率。此外,Bean API还支持在DOM节点移除时自动清理相关的事件监听器,防止内存泄漏。 六、扩展与社区支持 ...
无状态Bean不保留会话信息,每次调用独立,而有状态Bean能记住客户端的状态。EntityBean(实体Bean)则用于持久化数据,对应数据库中的记录。 以上是Java面试笔试中常见的知识点,深入理解和掌握这些概念对于成为一...
3. **DTO**:DTO是一种设计模式,用于在系统边界之间传输数据,避免了直接暴露底层数据结构。在服务层,DTO可以接收从数据库查询的结果,然后转换成适合客户端消费的格式。当在DTO与业务对象或视图模型之间进行转换...
EJB的目标是简化复杂的企业应用程序的开发,提高代码的可维护性和可扩展性。 **1.2 EJB的运行环境** EJB需要在特定的容器中运行,如JBOSS等。容器负责管理EJB的生命周期,提供事务处理、安全性、并发控制等功能。...
- **AddRef**:每当一个客户端获得组件的一个接口时,都会调用 `AddRef` 来增加引用计数,确保即使其他客户端还在使用组件时也不会被释放。 - **Release**:当客户端不再需要使用某个接口时,它会调用 `Release` 来...
- **SessionBean**代表客户端会话,管理临时状态,不持久化,适用于业务逻辑处理。 - **EntityBean**表示持久化的业务对象,与数据库紧密关联,用于数据存储。 9. **StatefulBean(无状态会话bean)**与**...
4. **组件发布与引用:** Java组件需要是具体类,遵循Java Bean规范,然后在DWR配置文件中声明,客户端通过特定路径引用JS文件来调用Java组件。 5. **回调函数:** DWR支持回调函数,用于处理服务器返回的结果,提供...
4. **EJB的客户端编程**:在客户端代码中,我们使用JNDI查找来获取EJB的远程接口实例。这通常涉及到以下步骤: - 创建InitialContext对象,配置相关的JNDI属性(如服务器地址、端口等)。 - 调用InitialContext的...
- **作用**:保护数据安全,避免外部代码意外修改对象的状态,提高代码的安全性和可维护性。 - **示例**:比如`BankAccount`类中的`balance`字段应该被设置为私有的,并通过公开的`deposit()`和`withdraw()`方法来...
`SessionBean`用于业务逻辑处理,可以是有状态的(Stateful Session Bean)也可以是无状态的(Stateless Session Bean),主要处理客户端请求。`EntityBean`用于持久化数据,代表数据库中的实体,可以是CMR(Entity)或...
- **StatefulBean** 保存客户端会话状态,每次交互都能记住之前的状态。 - **StatelessBean** 不保存会话状态,每次交互都是独立的。 这些是Java开发中的一些基础知识点,理解和掌握它们对于学习和使用Java至关...
会话Bean处理客户端请求,实体Bean代表持久化的业务对象,消息驱动Bean则处理异步消息。 #### EJB本地接口与远程接口区别 本地接口和远程接口主要用于区分EJB组件的访问方式。本地接口用于同一JVM内的组件间通信,...
1. **表现层和业务逻辑的完全分离**:DWR使JavaScript可以直接调用后台服务,避免了Scriptlets,减少了页面代码对样式的干扰,提升了开发效率。 2. **资源优化**:只加载一次页面,节省带宽,减少网络传输,提高...
forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器,浏览器根本不知道服务器发送的内容是从哪儿来的,所以它的地址栏中还是原来的地址。...
EJB通过远程接口(Remote Interface)进行调用,客户端通过此接口引用EJB组件,并调用其方法。EJB容器负责处理实际的调用过程,包括安全性检查、事务管理、状态管理等。 #### EJB与JAVABEAN的区别 JAVABEAN是Java...
- **定义**:抽象是指在程序设计过程中,忽略一个主题中与当前目标无关的那些方面,以便更充分地关注与当前目标相关的方面。 - **作用**:抽象有助于简化复杂的问题,使程序员能够专注于解决问题的核心逻辑。 - *...