相关疑难解决方法(0)

应该在哪里保留@Service注释?接口还是实现?

我正在使用Spring开发一个应用程序.我需要使用@Service注释.我ServiceIServiceImpl这样ServiceImpl implements ServiceI.我在这里很困惑,我应该在哪里保留@Service注释.

我应该注释接口或实现@Service吗?这两种方法有什么不同?

service spring

112
推荐指数
6
解决办法
6万
查看次数

Spring Autowiring class vs. interface?

我有这个Spring配置:

<bean id="boo" class="com.x.TheClass"/>
Run Code Online (Sandbox Code Playgroud)

该类TheClass实现TheInterface.然后我有这个(假设的)Java代码:

@Autowired
TheInterface x;

@Autowired
TheClass y;
Run Code Online (Sandbox Code Playgroud)

自动装配TheInterface工程但自动装配TheClass失败.春天给了我一NoSuchBeanDefinitionException堂课.

为什么你可以连接界面而不是课程?

java spring dependency-injection autowired

42
推荐指数
1
解决办法
4万
查看次数

为什么在服务和dao层中总是有单个实现接口?

我已经/看过一些spring-hibernate Web应用程序项目,它们具有与实际服务和dao类一样多的接口.

我一直认为这两个是这些单一实现接口的主要原因:

  1. Spring可以将实际实现作为给定类中的依赖项连接(松散耦合)

    public class Person { 
        @Autowired 
        private Address address;
    
        @Autowired 
        private AccountDetail accountDetail;
    
        public Person(Address address, AccountDetail accountDetail) 
        { // constructor
    
    Run Code Online (Sandbox Code Playgroud)
  2. 在进行单元测试时,我可以创建模拟类并单独测试类.

    Address mockedAddress = mock(Address);
    AccountDetail mockedAccountDetail = mock(AccountDetail);
    Person underTestPerson = new Person(mockedAddress, mockedAccountDetail); 
    // unit test follows
    
    Run Code Online (Sandbox Code Playgroud)

但是,最近,我意识到:

Spring可以将具体实现类连接为依赖项:

public class Person { 

@Autowired 
private AddressImpl address;

@Autowired 
private AccountDetailImpl accountDetail;

public Person(AddressImpl address, AccountDetailImpl accountDetail) { 
// constructor
Run Code Online (Sandbox Code Playgroud)

像EasyMock这样的模拟框架也可以模拟具体的类

AddressImpl mockedAddress = mock(AddressImpl);
AccountDetailImpl mockedAccountDetail = mock(AccountDetailImpl);
Person underTestPerson = new Person(mockedAddress, mockedAccountDetail); …
Run Code Online (Sandbox Code Playgroud)

java spring design-patterns domain-driven-design mocking

33
推荐指数
2
解决办法
7088
查看次数

Spring应用程序有Cglib2AopProxy警告

在开始我的应用程序时,我会收到大量警告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 />.我能做些什么来消除这些警告,或者更好的是,将这些类别排除在编织方面?

spring spring-aop spring-transactions

16
推荐指数
2
解决办法
2万
查看次数

Config.class 中的 CacheManager bean 定义导致 NoSuchBeanDefinitionException

我有一个正在检查数据库条目的 Spring 服务。为了最小化我的存储库调用,两个查找方法都是“@Cacheable”。但是当我尝试初始化我的服务 bean 而我的配置类有一个 CacheManager bean 定义时,我得到以下 NoSuchBeanDefinitionException:

Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'foo.mediacode.directory.MediaCodeDirectoryService' available
at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBean(DefaultListableBeanFactory.java:353)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBean(DefaultListableBeanFactory.java:340)
at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1093)
at foo.mediacode.directory.MediaCodeDirectoryService.implementation(MediaCodeDirectoryService.java:63)
at foo.campaigntree.directory.CampaignTreeDirectoryService.<init>(CampaignTreeDirectoryService.java:18)
... 15 more
Run Code Online (Sandbox Code Playgroud)

如果我取出 CacheManager bean 定义,我可以初始化我的服务 bean 并且它运行没有任何问题和缓存

这是我的代码:配置

...
    @Configuration
    @EnableCaching
    @EnableJpaRepositories(...)
    @PropertySource({...})
    public class MediaCodeDirectoryServiceConfig {

        private static Logger   configLogger    = Logger.getLogger(MediaCodeDirectoryServiceConfig.class.getName());

        @Value("${jpa.loggingLevel:FINE}")
        private String          loggingLevel;

        @Value("${mysql.databaseDriver}")
        private String          dataBaseDriver;

        @Value("${mysql.username}")
        private String          username;

        @Value("${mysql.password}")
        private String          password;

        @Value("${mysql.databaseUrl}")
        private String          databaseUrl;

        @Bean
        public …
Run Code Online (Sandbox Code Playgroud)

java eclipselink spring-data-jpa spring-cache

3
推荐指数
1
解决办法
1179
查看次数