java - 我也可以将 @Bean 注释应用于函数吗?

标签 java spring

我是 Spring Java 新手,对于在哪里使用 @Bean 注释有点困惑。 例如,请参阅以下代码:

@Configuration
@EnableTransactionManagement
public class HibernateConfig {

    @Autowired
    private Environment env;

    private final Properties hibernateProperties() {
        Properties properties = new Properties();
        properties.put("hibernate.dialect", env.getProperty("hibernate.dialect"));
        properties.put("hibernate.show_sql", env.getProperty("hibernate.show_sql"));
        properties.put("hibernate.format_sql", env.getProperty("hibernate.format_sql"));
        properties.put("hibernate.hbm2ddl.auto", env.getProperty("hibernate.hbm2ddl.auto"));
        properties.put("hibernate.max_fetch_depth", env.getProperty("hibernate.max_fetch_depth"));
        properties.put("hibernate.cache.use_second_level_cache",env.getProperty("hibernate.cache.use_second_level_cache"));
        properties.put("hibernate.cache.use_minimal_puts", env.getProperty("hibernate.cache.use_minimal_puts"));
        properties.put("hibernate.connection.release_mode", env.getProperty("hibernate.connection.release_mode"));
        properties.put("hibernate.cache.use_query_cache",env.getProperty("hibernate.cache.use_query_cache"));
        return properties;
    }

    @Bean
    public DataSource dataSource() {
        BasicDataSource dataSource = new BasicDataSource();
        dataSource.setDriverClassName(env.getProperty("spring.datasource.driver-class-name"));
        dataSource.setUrl(env.getProperty("spring.datasource.url"));
        dataSource.setUsername(env.getProperty("spring.datasource.username"));
        dataSource.setPassword(env.getProperty("spring.datasource.password"));

        return dataSource;
    }

    @Bean
    public LocalContainerEntityManagerFactoryBean entityManagerFactory() {
        LocalContainerEntityManagerFactoryBean lcemfb = new LocalContainerEntityManagerFactoryBean();
        lcemfb.setJpaVendorAdapter(getJpaVendorAdapter());
        lcemfb.setDataSource(dataSource());
        lcemfb.setPersistenceUnitName("entityManagerFactory");
        lcemfb.setPackagesToScan("com.sha.microservicecoursemanagement.model");
        lcemfb.setJpaProperties(hibernateProperties());
        return lcemfb;
    }


    @Bean
    public PlatformTransactionManager transactionManager() {
        return new JpaTransactionManager(entityManagerFactory().getObject());
    }

    @Bean
    public JpaVendorAdapter getJpaVendorAdapter() {
        JpaVendorAdapter adapter = new HibernateJpaVendorAdapter();
        return adapter;
    }

}

现在在上面的代码中,dataSourceLocalContainerEntityManagerFactoryBeanPlatformTransactionManagerJpaVendorAdapter这些函数的属性为@Bean。 现在,我在互联网上读到的是 @Bean 只能赋予类类型,而不能赋予函数。 有人可以解答我的困惑吗?

最佳答案

如果类用@Configuration注释,则@Bean可以应用于方法。 Refer this link

以下示例是我使用@Bean

@Configuration
public class ClientDataSourceConfig {

    @Value("${spring.datasource.driver}")
    private String driver;

    @Value("${spring.datasource.url}")
    private String url;

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

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

    public ClientDataSourceRouter dataSource;

    @Bean(name = "getDataSource")
    public ClientDataSourceRouter getDataSource() throws Exception {
        dataSource = new ClientDataSourceRouter();
        dataSource.init(driver, url, username, password);
        return dataSource;
    }
}

关于java - 我也可以将 @Bean 注释应用于函数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56751495/

相关文章:

spring - 为什么我在 Spring MVC 中得到此 URL 的 "400 Bad Request"?

java - 使用 easymock 收到错误

java - 如何以编程方式将色调添加到给定颜色?

java.lang.ClassCastException : com. sun.proxy.$Proxy0 无法转换为 org.andrea.myexample.myDeclarativeTransactionSpring.StudentJDBCTemplate

spring - Heroku 应用程序拒绝启动,因为它无法加载 kotlin.jvm.internal.Intrinsics

java - 使用自定义用户通过数据库进行 Spring Security 身份验证

java - 可能是由于 modulo(10,9)+7 超出了时间限制错误?

java - 如何在elasticsearch中访问嵌套的json?

java - Hashmap方法求和

java - Spring/Webflow 验证问题