2015-11-28 32 views
0

以限定在類豆在我創建如下兩個bean一個彈簧4應用更好的辦法:在彈簧

<!-- schemaFactory--> 
    <bean id="schemaFact" class="javax.xml.validation.SchemaFactory" 
     factory-method="newInstance"> 
     <constructor-arg value="http://www.w3.org/2001/XMLSchema" /> 
    </bean> 

    <!-- schema --> 
    <bean id="schema" class="javax.xml.validation.Schema" 
     factory-bean="schemaFact" factory-method="newSchema"> 
     <constructor-arg value="classpath:/configs/sample.xsd" /> 
    </bean> 

一個產生模式工廠和其他使用工廠(驗證對XSD XML) 。

並在代碼:

public class example { 

    @Inject 
    private Schema aschema; 
    ...... 

    private validate(){ 
     Validator validator = aschema.newValidator(); 
     validator.validate(xmlFile); 
} 

}

這工作得很好,但我不知道是否有可能寫這個spring.xml中,我們並不需要單獨定義工廠bean的方式(最後還有一個簡單的spring.xml)。正如你所看到的,我只需要schema豆注入我的example類和schemaFact根本不需要。

+0

爲什麼不使用Java的配置和刪除XML? – Tunaki

回答

0

無論您是否直接使用它們,注入良好的依賴關係都必須彈出bean。

所以,即使你是不是在你的代碼,但在其他的Spring bean注入它作爲依賴使用SchemaFactory直接,都必須Spring管理豆

你可以考慮使用註解,那麼你就不需要春天文件。

0

這是在java類中創建bean的一些示例代碼。可以在這裏創建任何bean並在相關類中創建自動連線。

這個註解給了我們很大的支持,才達到它ex- @Configuration

import java.util.Properties; 
import javax.persistence.SharedCacheMode; 

import........ 

@Configuration 
@ComponentScan(basePackages = {"<package>"}) 
@EnableTransactionManagement 
@PropertySources(value = {@PropertySource(value = {"<property file path>"})}) 
public class ModulesConfig { 

    private static final Logger log = LoggerFactory.getLogger(ModulesConfig.class); 

    @Autowired 
    private Environment environment; 

    @Bean(destroyMethod = "close") 
    public BoneCPDataSource getDataSource() { 
     BoneCPDataSource dataSource = new BoneCPDataSource(); 
     dataSource.setDriverClass(environment.getProperty("database.driver")); 
     dataSource.setJdbcUrl(environment.getProperty("database.url")); 
     dataSource.setUsername(environment.getProperty("database.username")); 
     dataSource.setPassword(environment.getProperty("database.password")); 
     dataSource.setIdleConnectionTestPeriodInMinutes(30); 
     dataSource.setMaxConnectionsPerPartition(5); 
     dataSource.setMinConnectionsPerPartition(2); 
     dataSource.setPartitionCount(3); 
     dataSource.setAcquireIncrement(2); 
     dataSource.setStatementsCacheSize(100); 

     return dataSource; 
    } 

    @Bean 
    @Primary 
    public LocalContainerEntityManagerFactoryBean entityManagerFactory() { 
     JpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter(); 

     Properties jpaProperties = new Properties(); 
     jpaProperties.setProperty("hibernate.dialect", "org.hibernate.dialect.MySQL5Dialect"); 
     jpaProperties.setProperty("hibernate.showSql", "false"); 

     LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean(); 
     em.setDataSource(getDataSource()); 
     em.setPersistenceUnitName("entityManagerFactory"); 
     em.setPackagesToScan("<packages>"); 
     em.setJpaVendorAdapter(vendorAdapter); 
     em.setJpaProperties(jpaProperties); 
     em.setSharedCacheMode(SharedCacheMode.ENABLE_SELECTIVE); 

     return em; 
    } 

    @Bean(name = "transactionManager1") 
    @Primary 
    public JpaTransactionManager getTransactionManager() { 
     JpaTransactionManager transactionManager = new JpaTransactionManager(); 
     transactionManager.setEntityManagerFactory(entityManagerFactory().getObject()); 

     return transactionManager; 
    } 

    @Bean(name = "transactionManager2") 
    public JpaTransactionManager getTransactionManager2() { 
     JpaTransactionManager transactionManager = new JpaTransactionManager(); 
     transactionManager.setEntityManagerFactory(entityManagerFactory2().getObject()); 

     return transactionManager; 
    } 

    @Bean 
    @Qualifier("VoucherServiceMarshaller") 
    public Jaxb2Marshaller getVoucherServiceMarshaller() { 
     Jaxb2Marshaller marshaller = new Jaxb2Marshaller(); 
     marshaller.setContextPath(environment.getProperty("voucher.service.marshaller.contextPath")); 

     return marshaller; 
    } 

    @Bean 
    @Qualifier("VoucherServiceTemplate") 
    public WebServiceTemplate getVoucherServiceTemplate() { 
     WebServiceTemplate template = new WebServiceTemplate(getVoucherServiceMarshaller()); 
     template.setDefaultUri(environment.getProperty("voucher.service.defaultUri")); 

     return template; 
    } 

    @Bean 
    public VoucherServiceProxy getVoucherServiceProxy() { 
     VoucherServiceProxy voucherServiceProxy = new VoucherServiceProxy(); 

     return voucherServiceProxy; 
    } 

    @Bean 
    public MessageSource messageSource() { 
     ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource(); 
     messageSource.setBasename("classpath:messages"); 
     messageSource.setDefaultEncoding("UTF-8"); 

     return messageSource; 
    } 

    @Bean 
     public JavaMailSender javaMailSender() { 
      JavaMailSenderImpl mailSender = new JavaMailSenderImpl(); 
      Properties mailProperties = new Properties(); 

      mailProperties.put("mail.smtp.host", environment.getProperty("mail.smtp.host")); 
      mailProperties.put("mail.smtp.socketFactory.port", environment.getProperty("mail.smtp.socketFactory.port")); 
      mailProperties.put("mail.smtp.socketFactory.class", environment.getProperty("mail.smtp.socketFactory.class")); 
      mailProperties.put("mail.smtp.auth", environment.getProperty("mail.smtp.auth")); 

      mailSender.setJavaMailProperties(mailProperties); 

      mailSender.setUsername(environment.getProperty("mail.username")); 
      mailSender.setPassword(environment.getProperty("mail.password")); 

      return mailSender; 
     } 


    @Bean 
    public ChargingGatewayServiceProxy getChargingGatewayServiceProxy() { 
     ChargingGatewayServiceProxy chargingGatewayServiceProxy = new ChargingGatewayServiceProxy(); 

     return chargingGatewayServiceProxy; 
    } 

    @Bean 
    @Qualifier("ChargingGatewayServiceMarshaller") 
    public Jaxb2Marshaller getChargingGatewayServiceMarshaller() { 
     Jaxb2Marshaller marshaller = new Jaxb2Marshaller(); 
     marshaller.setContextPath(environment.getProperty("cg.service.marshaller.contextPath1")); 

     return marshaller; 
    } 

    @Bean 
    @Qualifier("ChargingGatewayServiceTemplate") 
    public WebServiceTemplate getChargingGatewayServiceTemplate() { 
     WebServiceTemplate template = new WebServiceTemplate(getChargingGatewayServiceMarshaller()); 
     template.setDefaultUri(environment.getProperty("cg.service.url")); 
     template.setMessageSender(getMessageSender()); 

     return template; 
    } 

    @Bean 
    public HttpComponentsMessageSender getMessageSender() { 
     HttpComponentsMessageSender httpComponentsMessageSender = new HttpComponentsMessageSender(); 
     httpComponentsMessageSender.setConnectionTimeout(Integer.parseInt(environment.getProperty("cg.connection.timeout"))); 
     httpComponentsMessageSender.setReadTimeout(Integer.parseInt(environment.getProperty("cg.read.timeout"))); 

     return httpComponentsMessageSender; 
    } 

    @Bean 
    public RestTemplate restTemplate() { 
     return new RestTemplate(clientHttpRequestFactory()); 
    } 

    private ClientHttpRequestFactory clientHttpRequestFactory() { 
     HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory(); 
     factory.setReadTimeout(50000); 
     factory.setConnectTimeout(50000); 
     return factory; 
    } 

    @Bean 
    public Cache cacheTemp() { 
     net.sf.ehcache.CacheManager cm = net.sf.ehcache.CacheManager.create().getInstance(); 

     cm.addCache("cacheTemp"); 
     Cache cache = cm.getCache("cacheTemp"); 

     return cache; 
    } 

    @Bean 
    public Cache cacheActive() { 
     net.sf.ehcache.CacheManager cm = net.sf.ehcache.CacheManager.create().getInstance(); 

     cm.addCache("cacheActive"); 
     Cache cache = cm.getCache("cacheActive"); 

     return cache; 
    } 

    @Bean 
    public Cache cache() { 
     net.sf.ehcache.CacheManager cm = net.sf.ehcache.CacheManager.create().getInstance(); 

     cm.addCache("cache"); 
     Cache cache = cm.getCache("cache"); 

     return cache; 
    } 

}