a_l_e_x
a_l_e_x

Reputation: 400

Spring boot: I need an explanation for a few lines of code

I am studying spring boot, and am failing to understand a few lines of code. Referring to the code below, I would like to understand what is needed

@ComponentScan ("boot.entry")

and these two lines declared in the transactionManager() method, that is

HibernateTransactionManager txManager = new HibernateTransactionManager ();
txManager.setSessionFactory (sessionFactory (). getObject ());

Can anyone kindly help me?

    package config;  
      
    import java.util.Properties;  
    import javax.sql.DataSource;  
    import org.springframework.beans.factory.annotation.Value;  
    import org.springframework.boot.autoconfigure.EnableAutoConfiguration;  
    import org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration;  
    import org.springframework.context.annotation.Bean;  
    import org.springframework.context.annotation.ComponentScan;  
    import org.springframework.context.annotation.ComponentScans;  
    import org.springframework.context.annotation.Configuration;  
    import org.springframework.jdbc.datasource.DriverManagerDataSource;  
    import org.springframework.orm.hibernate5.HibernateTransactionManager;  
    import org.springframework.orm.hibernate5.LocalSessionFactoryBean;  
    import org.springframework.transaction.annotation.EnableTransactionManagement;  
    import org.springframework.web.servlet.view.InternalResourceViewResolver;  
      
      
    @Configuration  
    @EnableTransactionManagement  
    @EnableAutoConfiguration(exclude = { HibernateJpaAutoConfiguration.class})  
    @ComponentScans(value = { @ComponentScan("boot.entry"),  
              @ComponentScan("Model"),  
              @ComponentScan("Controller"),  
              @ComponentScan("DAO"),  
              @ComponentScan("Miscallaneous"),  
              @ComponentScan("Service")})  
    public class Config {  
      
         @Value("${db.driver}")  
            private String DB_DRIVER;  
      
            @Value("${db.password}")  
            private String DB_PASSWORD;  
      
            @Value("${db.url}")  
            private String DB_URL;  
      
            @Value("${db.username}")  
            private String DB_USERNAME;  
      
            @Value("${hibernate.dialect}")  
            private String HIBERNATE_DIALECT;  
      
            @Value("${hibernate.show_sql}")  
            private String HIBERNATE_SHOW_SQL;  
      
            @Value("${hibernate.hbm2ddl.auto}")  
            private String HIBERNATE_HBM2DDL_AUTO;  
      
            @Value("${entitymanager.packagesToScan}")  
            private String ENTITYMANAGER_PACKAGES_TO_SCAN;  
      
            @Bean  
            public LocalSessionFactoryBean sessionFactory() {  
                LocalSessionFactoryBean sessionFactory = new LocalSessionFactoryBean();  
                sessionFactory.setDataSource(dataSource());  
                sessionFactory.setPackagesToScan(ENTITYMANAGER_PACKAGES_TO_SCAN);  
                Properties hibernateProperties = new Properties();  
                hibernateProperties.put("hibernate.dialect", HIBERNATE_DIALECT);  
                hibernateProperties.put("hibernate.show_sql", HIBERNATE_SHOW_SQL);  
                hibernateProperties.put("hibernate.hbm2ddl.auto", HIBERNATE_HBM2DDL_AUTO);  
                sessionFactory.setHibernateProperties(hibernateProperties);  
                return sessionFactory;  
            }  
      
            @Bean  
            public DataSource dataSource() {  
                DriverManagerDataSource dataSource = new DriverManagerDataSource();  
                dataSource.setDriverClassName(DB_DRIVER);  
                dataSource.setUrl(DB_URL);  
                dataSource.setUsername(DB_USERNAME);  
                dataSource.setPassword(DB_PASSWORD);  
                return dataSource;  
            }  
      
            @Bean  
            public HibernateTransactionManager transactionManager() {  
                HibernateTransactionManager txManager = new HibernateTransactionManager();  
                txManager.setSessionFactory(sessionFactory().getObject());  
                return txManager;  
            }  
              
            @Bean  
            public InternalResourceViewResolver jspViewResolver() {  
                InternalResourceViewResolver resolver= new InternalResourceViewResolver();  
                resolver.setPrefix("/views/");  
                resolver.setSuffix(".jsp");  
                return resolver;  
            }   
             
             
             
        }  

Upvotes: 0

Views: 202

Answers (2)

msucil
msucil

Reputation: 846

@ComponentScan ("boot.entry") @ComponentScan basically instruct the Spring IoC to track down the entities for dependency injection.

HibernateTransactionManager txManager = new HibernateTransactionManager ();
txManager.setSessionFactory (sessionFactory (). getObject ());

HibernateTransactionManager handles the transaction handling which requires HibernateSession which is basically an instance of datasource wrapped within JPA specification to handle OOP oriented query handling.

Upvotes: 1

Kim Kakan Andersson
Kim Kakan Andersson

Reputation: 637

@ComponentScan ("boot.entry") Means that It should load all Components (Beans, Services etc) inside the boot.entry package, which probably should be contained in your project.

Hibernate is an ORM library that lets you do SQL queries without writing SQL. What you are doing in your code is basically initializing the transactionManager with the data from the sessionFactory() function.

Upvotes: 0

Related Questions