对于自己的类源,我们可以使用多种方式进行依赖注入,而对于其他数据源,我们应该怎么去注入依赖呢?
下面有案例:
注入c3p0并调用
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> <property name="driverClass" value="com.mysql.jdbc.Driver"/> <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/spring_db"/> <property name="user" value="root"/> <property name="password" value="root"/> <property name="maxPoolSize" value="1000"/> </bean>
DataSource dataSource = (DataSource) ctx.getBean("dataSource"); System.out.println(dataSource);
几种容器类
最原始的类是beanfactory类,其最常用的接口是applicationcontext接口,而applicationcontext类的主流接口有两个,classpathxmlapplicationcontext接口,FileSystemxmlApplicationContext类
1.ClassPathXmlApplicationContext类
ClassPathXmlApplicationContext默认读取的是项目下classes文件夹下的文件,默认情况下路径是不需要加classpath:
访问绝对路径的时候:
ApplicationContext ctx = new ClassPathXmlApplicationContext("file:F:/stud/src/main/webapp/WEB-INF/applicationContext.xml");
多个配置文件:默认是classpath
ApplicationContext ctx = new ClassPathXmlApplicationContext(new String[]{"applicationContext.xml","spring.xml"});
支持通配符
ApplicationContext ctx = new ClassPathXmlApplicationContext(*.xml);
2.FileSystemXmlApplicationContext 默认的路径是项目的根目录
ApplicationContext ctx = new FileSystemXmlApplicationContext("src/main/resources/applicationContext.xml");
1.可以读取绝对路径
ApplicationContext ctx = new FileSystemXmlApplicationContext("file:F:/stud/kaptcha/src/main/webapp/WEB-INF/applicationContext.xml");
// 使用磁盘绝对路径可以不加前缀
ApplicationContext ctx = new FileSystemXmlApplicationContext("F:/stud/kaptcha/src/main/webapp/WEB-INF/applicationContext.xml");
2.可以读取根目录下的路径
3.也可以对其classs下的文件路径,需要加上classpath:
ApplicationContext ctx = new FileSystemXmlApplicationContext("classpath:applicationContext.xml");
可以看出,这两者的差别其实不大
对于容器类,从获取bean的角度看的话,有两种:按id号加载,按类型加载
1.按id号加载
最常用的加载方法,对应于bean的id号
BookDao bookDao = (BookDao) ctx.getBean("bookDao");
2.按类型加载
BookDao bookDao = ctx.getBean("bookDao",BookDao.class);
甚至可以省略id号,直接按类型加载(如此使用要求类型唯一可查)
BookDao bookDao = ctx.getBean(BookDao.class);
而加载配置源的方法,则主要有两种:类路径加载,绝对文件路径加载
bean相关总结
bean其实就是对于项目中各种类的引用和加载,有业务逻辑类,操作类,web交互类等,汇总在一个配置文件中是比较方便调用的方式
依赖注入总结
常规类的依赖注入主要有两种:setter注入(set方法---property标签),构造器注入(constructor标签,避免了set方法)