例
interface IA
{
public void someFunction();
}
@Resource(name="b")
class B implements IA
{
public void someFunction()
{
//busy code block
}
public void someBfunc()
{
//doing b things
}
}
@Resource(name="c")
class C implements IA
{
public void someFunction()
{
//busy code block
}
public void someCfunc()
{
//doing C things
}
}
class MyRunner
{
@Autowire
@Qualifier("b")
IA worker;
worker.someFunction();
}
Run Code Online (Sandbox Code Playgroud)
谁可以给我解释一下这个.
@Qualifier
还是@Resource
?我一直在用Java编写大学的几门课程,我有以下问题:
从方法论上接受每个类应该实现一个接口吗?不这样做被认为是不好的做法吗?你能描述一下使用接口不是一个好主意的情况吗?
编辑:就个人而言,我喜欢将Interfaces作为一种方法和习惯使用的概念,即使它并不明显有益.Eclipse自动创建了一个包含所有方法的类文件,因此它不会浪费任何时间.
在开始我的应用程序时,我会收到大量警告o.s.aop.framework.Cglib2AopProxy 'Unable to proxy method [public final void org.springframework.jdbc.core.support.JdbcDaoSupport.setDataSource(javax.sql.DataSource)] because it is final: All calls to this method via a proxy will be routed directly to the proxy.'
,大约有十几个功能.
现在我完全理解基于代理的方面不能应用于最终方法.但是,我没有(至少是故意的)尝试编织任何方面JdbcDaoSupport
.我怀疑它来自<tx:annotation-driven />
.我能做些什么来消除这些警告,或者更好的是,将这些类别排除在编织方面?
我有一个延伸的春豆HibernateDaoSupport
.我希望将这个bean注入到我的控制器中,但我不希望它实现任何接口.我只是想从我的其余代码中引用具体的类(不是可以使用AopProxy?)有没有人有办法做到这一点?
<bean id="mySampleService" class="com.sample.MySampleService">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
@Autowired
private MySampleService mySampleService;
... getters and setters ....
Run Code Online (Sandbox Code Playgroud)
我知道使用界面是一个好主意,这是IoC的重点,但请不要建议我使用界面.
大多数ј2ее(spring和JPA)类都设计有接口.除了继承任何技术原因有?像dynaimc proxy或aop,我需要更多技术细节
前
public interface UserDAO {
void delete();
void update();
void save();
List<User> get();
}
public class UserDAOImpl implements UserDAO {
public void delete(){}
public void update(){}
public void save(){}
public List<User> get(){}
}
Run Code Online (Sandbox Code Playgroud) 我试图从高层次上了解 Spring 代理的工作原理。为什么我应该在应用程序中使用“API Interface & Impl Bean”模式或仅使用“Bean Class”模式。我读了很多 SO 答案,但它们都非常古老,我相信大多与Java 7 和 Spring 3.x相关。我想知道 2020 年Java 11+ 与 Spring 5.x (Spring Boot 2.x)仍然相关。有什么可以遵循的“最佳实践”吗?
另外,随着 的可用性@FunctionalInterface
,如果我有实现像Consumer
、Function
和类似接口的 bean,那么用where代替是否Predicate
有意义。这只是一个例子,我也可能使用我自己的功能接口(带或不带泛型)。@Autowire/@Inject
Consumer<A>
Foo
Foo implements Consumer<A>
考虑到上述所有内容,我还想知道 Spring 创建的每个 bean 是否都被代理,或者如果实际上不需要的话,spring 创建 bean 时是否不代理它们。对于前。如果一个类只是简单地注释并@Component
直接注入,没有其他注释或代理需求,spring还会为这个bean创建代理吗?
我已经看过的一些问题:
2020 年 5 月 7 日更新:
在阅读了更多文章、评论和答案后,我想谈谈我想到的确切问题/疑问。让我们考虑以下示例。我有一个课程Foo
和AnotherFoo
。
@Component
@RequiredArgsConstructor // From lombok
class …
Run Code Online (Sandbox Code Playgroud)