Bonjour,
j'ai un devoir qui consiste, entre autres, à passer d'un singleton basique (connexion JDBC) à l'utilisation de Spring.
En bref, je dois virer le singleton de mon projet et utiliser l'injection de dépendances.
Mais j'ai quelques problèmes pour le faire...
Actuellement, j'ai un singleton qui instancie un objet de type Connection :
Pour réaliser mon travail et remplacer ce fameux singleton, j'ai donc essayé avec Spring ceci dans mon applicationContext.xml :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 public class ConnectionManager { private Connection connect; private static final Logger log = LoggerFactory.getLogger(ConnectionManager.class); public static Connection getInstance() { if (connect == null) { try { connect = DriverManager.getConnection("jdbc:mysql://localhost:3306/projetspring", "root", "password"); } catch (SQLException e) { log.debug("Connection failed ! ", e); } } return connect; } }
Mon database.properties:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="location" value="classpath:database.properties" /> </bean> <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="${jdbc.driverClassName}" /> <property name="url" value="${jdbc.url}" /> <property name="username" value="${jdbc.username}" /> <property name="password" value="${jdbc.password}" /> </bean>
Mais là, je tombe sur un problème. Premièrement, mon code dans Spring instancie un objet de type "DriverManagerDataSource". Or, j'aimerai obtenir un objet de type Connection !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4jdbc.driverClassName=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/projetspring jdbc.username=root jdbc.password=password
Du coup, j'ai tenté dans mon DAO :
Mais ça ne fonctionne pas. L'objet retourné est NULL.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 public class UserDao { private final static Logger log = LoggerFactory.getLogger(MediaDao.class); @Resource DriverManagerDataSource dataSource; Connection conn; public UserDao() { try { this.conn = this.dataSource.getConnection(); } catch (SQLException e) { e.printStackTrace(); } } }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 Caused by: org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [fr.gesa.opr.user.dao.UserDao]: Constructor threw exception; nested exception is java.lang.NullPointerException at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:162) at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:76) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:990) ... 43 more Caused by: java.lang.NullPointerException at fr.gesa.opr.user.dao.UserDao.<init>(UserDao.java:35) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:532) at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:147) ... 45 more
Ma question est donc la suivante : Comment puis-je récupérer un objet de type Connection avec Spring afin de l'injecter dans ma classe DAO ?
Je vous remercie
Partager