Spring 如何获取和设置弹簧&x27;自动连线对象?
我正在实现JSF+Spring集成web app,我有几个服务类,如下所示:Spring 如何获取和设置弹簧&x27;自动连线对象?,spring,Spring,我正在实现JSF+Spring集成web app,我有几个服务类,如下所示: @Service @Transactional public class AccountService { @Autowired private AccountRepository accountRepository; public AccountRepository getRepository() { return account
@Service
@Transactional
public class AccountService
{
@Autowired
private AccountRepository accountRepository;
public AccountRepository getRepository()
{
return accountRepository;
}
public Account insertOrUpdate(Account entity)
{
return accountRepository.save(entity);
}
public Account findOne(Account entiti)
{
return accountRepository.findOne(entiti.getId());
}
//some other methods
}
@Service
@Transactional
public class BaseService
{
JpaRepository repository;
public void setRepository(JpaRepository repository)
{
this.repository = repository;
}
public BaseEntity insertOrUpdate(BaseEntity entity)
{
return (BaseEntity) repository.save(entity);
}
public BaseEntity findOne(BaseEntity entity)
{
return (BaseEntity) repository.findOne(entity.getId());
}
}
我想实现一个基类,它包含所有服务类的通用方法,如下所示:
@Service
@Transactional
public class AccountService
{
@Autowired
private AccountRepository accountRepository;
public AccountRepository getRepository()
{
return accountRepository;
}
public Account insertOrUpdate(Account entity)
{
return accountRepository.save(entity);
}
public Account findOne(Account entiti)
{
return accountRepository.findOne(entiti.getId());
}
//some other methods
}
@Service
@Transactional
public class BaseService
{
JpaRepository repository;
public void setRepository(JpaRepository repository)
{
this.repository = repository;
}
public BaseEntity insertOrUpdate(BaseEntity entity)
{
return (BaseEntity) repository.save(entity);
}
public BaseEntity findOne(BaseEntity entity)
{
return (BaseEntity) repository.findOne(entity.getId());
}
}
但这里的问题是如何动态地自动连接存储库?我尝试从下面的子类设置存储库,但没有成功。当我在super类中使用存储库
对象时,它将导致NullPointerException
。有没有关于如何实现这一目标的建议
@Service
@Transactional
public class AccountService extends BaseService
{
@Autowired
private AccountRepository accountRepository;
public AccountService()
{
super.setRepository(accountRepository);
}
}
如果要
获取并设置自动连线对象
并使用@autowired
注释,则需要在类链接@Service
,@RestController
上使用注释,并在applicationcontext.xml
文件中使用code
和
扫描基本包,此bass软件包扫描用于扫描注释。您还可以使用另一种方法,需要使用java类配置创建bean,并为autowire创建对象。在java配置类中,您需要使用@configuration
注释。您可以找到下面的配置示例代码,我正在为modelMapper
classs创建bean
@Configuration
public class ModelMapperConfig {
@Bean(name = "modelMapper")
public ModelMapper getModelMapper() {
ModelMapper modelMapper = new ModelMapper();
return modelMapper;
}
@Bean(name = "modelMapperWithConverter")
public ModelMapper getModelMapperWithConverter() {
ModelMapper modelMapper = new ModelMapper();
return modelMapper;
}
您还可以从XMLCLAS创建bean,您需要将bean创建到ApplicationContacxt.xml
。您可以在下面找到示例代码:
<bean id = "advertisementRepo" class = "com.amstech.mayal.demo.test.AdvertisementRepo" />
如果您想
获取并设置自动连线对象
并使用@autowired
注释,则需要在类链接@Service
,@RestController
上使用注释,并在applicationcontext.xml
文件中使用code
和
扫描基本包,此bass软件包扫描用于扫描注释。您还可以使用另一种方法,需要使用java类配置创建bean,并为autowire创建对象。在java配置类中,您需要使用@configuration
注释。您可以找到下面的配置示例代码,我正在为modelMapper
classs创建bean
@Configuration
public class ModelMapperConfig {
@Bean(name = "modelMapper")
public ModelMapper getModelMapper() {
ModelMapper modelMapper = new ModelMapper();
return modelMapper;
}
@Bean(name = "modelMapperWithConverter")
public ModelMapper getModelMapperWithConverter() {
ModelMapper modelMapper = new ModelMapper();
return modelMapper;
}
您还可以从XMLCLAS创建bean,您需要将bean创建到ApplicationContacxt.xml
。您可以在下面找到示例代码:
<bean id = "advertisementRepo" class = "com.amstech.mayal.demo.test.AdvertisementRepo" />
这个问题可以通过创建一个通用的基本服务类来解决,如下所示:
BaseService.java,服务方法的接口
public interface BaseService<T extends BaseEntity, ID extends Serializable, R extends JpaRepository>
{
public T insertOrUpdate(T entity);
public Iterable<T> insertOrUpdate(Iterable<T> entities);
public T findOne(ID id);
public List<T> findAll();
//.........
}
AccountService.java,最后是您的服务类,它扩展了BaseServiceImpl
@Service
@Transactional
public class AccountService extends BaseServiceImpl<Account, Integer, AccountRepository> //implements BaseService<Account, Integer, AccountRepository>
{
@Autowired
public AccountService(AccountRepository repository) {
super(repository);
}
public AccountRepository getRepository()
{
return super.repository;
}
//create your own service method here
}
@服务
@交易的
公共类AccountService扩展BaseServiceImpl//实现BaseService
{
@自动连线
公共AccountService(AccountRepository存储库){
超级(储存库);
}
公共AccountRepository getRepository()
{
返回super.repository;
}
//在这里创建您自己的服务方法
}
最后,很抱歉我的英语不好。这个问题可以通过创建一个通用的基本服务类来解决,如下所示:
BaseService.java,服务方法的接口
public interface BaseService<T extends BaseEntity, ID extends Serializable, R extends JpaRepository>
{
public T insertOrUpdate(T entity);
public Iterable<T> insertOrUpdate(Iterable<T> entities);
public T findOne(ID id);
public List<T> findAll();
//.........
}
AccountService.java,最后是您的服务类,它扩展了BaseServiceImpl
@Service
@Transactional
public class AccountService extends BaseServiceImpl<Account, Integer, AccountRepository> //implements BaseService<Account, Integer, AccountRepository>
{
@Autowired
public AccountService(AccountRepository repository) {
super(repository);
}
public AccountRepository getRepository()
{
return super.repository;
}
//create your own service method here
}
@服务
@交易的
公共类AccountService扩展BaseServiceImpl//实现BaseService
{
@自动连线
公共AccountService(AccountRepository存储库){
超级(储存库);
}
公共AccountRepository getRepository()
{
返回super.repository;
}
//在这里创建您自己的服务方法
}
最后,对不起,我的英语不好