我是JSF和Spring Security的新手。 我正在构建一个基于this tutorial的JSF 2项目。我想将dataSource bean放在java类中,因为我正在生成JDBC连接的url和另一个类中的用户。 如何将我的security-config.xml中的代码放到java类中。
<beans:bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<beans:property name="driverClassName" value="com.mysql.jdbc.Driver" />
<beans:property name="url" value="jdbc:mysql://localhost:3306/spring_security_db" />
<beans:property name="username" value="root" />
<beans:property name="password" value="" />
</beans:bean>
答案 0 :(得分:1)
一种解决方案是使用Spring expression language。您可以指定要检索的方法调用,例如url参数:
<beans:bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<beans:property name="driverClassName" value="com.mysql.jdbc.Driver" />
<beans:property name="url" value="#{someOtherBean.someMethod()}" />
<beans:property name="username" value="root" />
<beans:property name="password" value="" />
</beans:bean>
您需要定义您正在引用其方法的另一个bean。程序化方法将是这样的:
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
@Configuration
public class AppConfig {
@Bean
public DriverManagerDataSource dataSource() {
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://localhost:3306/spring_security_db");
dataSource.setUsername("root");
dataSource.setPassword("");
return dataSource;
}
}
在Spring配置中,您需要使用适当的包指定组件扫描以获取bean:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<context:component-scan base-package="yourpackage.configpackage"/>
</beans>
答案 1 :(得分:1)
你应该创建一个实现DriverManagerDataSource的新类,它是构造函数,然后在你的bean定义中,在class标签中放置该类的名称。 你的班级是这样的:
package dao;
public class dataSource extends DriverManagerDataSource {
public dataSource() {
// TODO Auto-generated constructor stub
this.setDriverClassName("com.mysql.jdbc.Driver");
this.setUrl("jdbc:mysql://.../.....");
this.setUsername(""); this.setPassword("");
}
}
你的bean定义如下:
<beans:bean id="dataSource" class="dao.dataSource">