基于xml文件的IOC配置
程序员文章站
2022-03-10 13:05:30
基于xml文件的IOC配置 简述 IOC的作用是降低程序间的耦合(依赖关系)而依赖关系的维护是由spring来维护的;我们在当前类使用到其他类的对象,这时spring提供这种关系的管理,我们只需要在配置文件中加以声明即可。我们称依赖关系的维护是依赖注入。 注入的数据 基本数据类型和String类型 ......
-
简述
-
ioc的作用是降低程序间的耦合(依赖关系)而依赖关系的维护是由spring来维护的;我们在当前类使用到其他类的对象,这时spring提供这种关系的管理,我们只需要在配置文件中加以声明即可。我们称依赖关系的维护是依赖注入。
-
-
注入的数据
-
基本数据类型和string类型
-
其他bean类型
-
复杂类型/集合类型
-
-
注入方式
-
使用构造函数提供
-
使用constructor-arg标签,隶属于bean标签
-
此标签属性的声明
-
type:用于要指定的数据的数据类型,这数据类型也是构造函数中某个或者某些参数的类型
-
index:用于要指定注入的参数在构造函数中指定参数的位置,从0开始
-
name:用于要制定的构造函数的参数名称 (强烈建议使用)
-
value:用于指定基本数据类型和string类型的数据
-
ref:用于指定基本数据类型和string类型的数据
package com.mypro.service.impl; import com.mypro.dao.userdao; import com.mypro.dao.impl.userdaoimpl; import com.mypro.service.userservice; import java.util.date; /** * 用户的业务实现类 */ public class userserviceimpl implements userservice { // 经常变化的数据并不适用数据依赖注入 private string name; private integer age; private date birth; public userserviceimpl(string name, integer age, date birth) { this.name = name; this.age = age; this.birth = birth; } private userdao userdao = new userdaoimpl(); @override public void saveuser() { userdao.saveuser(); } }
<?xml version="1.0" encoding="utf-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xsi:schemalocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="now" class="java.util.date"></bean> <bean id="userservice" class="com.mypro.service.impl.userserviceimpl"> <constructor-arg name="name" value="xiansen"></constructor-arg> <constructor-arg name="age" value="20"></constructor-arg> <constructor-arg name="birth" value="now"></constructor-arg> </bean> <bean id="userdao" class="com.mypro.dao.impl.userdaoimpl"> </bean> </beans>
-
-
-
使用set方法提供
-
使用property标签,隶属于bean标签
-
此标签属性的声明
-
name:用于要制定的构造函数的参数名称 (强烈建议使用)
-
value:用于指定基本数据类型和string类型的数据
-
ref:用于指定基本数据类型和string类型的数据
package com.mypro.dao.impl; import com.mypro.dao.userdao; import java.util.*; /** * 用户的持久层实现类 */ public class userdaoimpl implements userdao { // 经常变化的数据并不适用依赖注入 private string name; private integer age; private date birth; // 复杂类型的数据的注入 private string[] mystrs; private list<string> mylists; private set<string> mysets; private map<string, string> mymaps; private properties myprops; public void setmystrs(string[] mystrs) { this.mystrs = mystrs; } public void setmylists(list<string> mylists) { this.mylists = mylists; } public void setmysets(set<string> mysets) { this.mysets = mysets; } public void setmymaps(map<string, string> mymaps) { this.mymaps = mymaps; } public void setmyprops(properties myprops) { this.myprops = myprops; } public void setname(string name) { this.name = name; } public void setage(integer age) { this.age = age; } public void setbirth(date birth) { this.birth = birth; } @override public void saveuser() { system.out.println("用户保存成功!"); } }
<?xml version="1.0" encoding="utf-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xsi:schemalocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="now" class="java.util.date"></bean> <bean id="userservice" class="com.mypro.service.impl.userserviceimpl"> <constructor-arg name="name" value="xiansen"></constructor-arg> <constructor-arg name="age" value="20"></constructor-arg> <constructor-arg name="birth" value="now"></constructor-arg> </bean> <!-- 复杂类型注入 用于list集合注入的标签 list、array、set 用于map集合注入的标签 map、props 结构相同的标签可以互换 --> <bean id="userdao" class="com.mypro.dao.impl.userdaoimpl"> <property name="name" value="xiaohu"></property> <property name="age" value="18"></property> <property name="birth" ref="now"></property> <property name="mystrs"> <array> <value>aa</value> <value>bb</value> </array> </property> <property name="mylists"> <list> <value>aa</value> <value>bb</value> </list> </property> <property name="mysets"> <set> <value>aa</value> <value>bb</value> </set> </property> <property name="mymaps"> <map> <entry key="aa" value="aa"></entry> <entry key="bb"> <value>bb</value> </entry> </map> </property> <property name="myprops"> <props> <prop key="aa">aa</prop> <prop key="bb">bb</prop> </props> </property> </bean> </beans>
-
-
-
基于xml文件完成ioc配置(案例)
-
使用dbutils包完成简单业务,导入必要的包
<dependencies> <dependency> <groupid>org.springframework</groupid> <artifactid>spring-context</artifactid> <version>5.0.2.release</version> </dependency> <dependency> <groupid>commons-dbutils</groupid> <artifactid>commons-dbutils</artifactid> <version>1.4</version> </dependency> <dependency> <groupid>mysql</groupid> <artifactid>mysql-connector-java</artifactid> <version>5.1.6</version> </dependency> <dependency> <groupid>c3p0</groupid> <artifactid>c3p0</artifactid> <version>0.9.1.2</version> </dependency> <dependency> <groupid>junit</groupid> <artifactid>junit</artifactid> <version>4.11</version> <scope>test</scope> </dependency> </dependencies>
-
实体类words
package com.mypro.entity; import java.util.date; public class words { private integer id; private string word; private string translation; private string introduction; private integer star; private date add_time; private integer group_id; @override public string tostring() { return "words{" + "id=" + id + ", word='" + word + '\'' + ", translation='" + translation + '\'' + ", introduction='" + introduction + '\'' + ", star=" + star + ", add_time=" + add_time + ", group_id=" + group_id + '}'; } public integer getid() { return id; } public void setid(integer id) { this.id = id; } public string getword() { return word; } public void setword(string word) { this.word = word; } public string gettranslation() { return translation; } public void settranslation(string translation) { this.translation = translation; } public string getintroduction() { return introduction; } public void setintroduction(string introduction) { this.introduction = introduction; } public integer getstar() { return star; } public void setstar(integer star) { this.star = star; } public date getadd_time() { return add_time; } public void setadd_time(date add_time) { this.add_time = add_time; } public integer getgroup_id() { return group_id; } public void setgroup_id(integer group_id) { this.group_id = group_id; } }
-
业务层接口wordsservice和实现类wordsserviceimpl (接口类省略)
package com.mypro.entity; import java.util.date; public class words { private integer id; private string word; private string translation; private string introduction; private integer star; private date add_time; private integer group_id; @override public string tostring() { return "words{" + "id=" + id + ", word='" + word + '\'' + ", translation='" + translation + '\'' + ", introduction='" + introduction + '\'' + ", star=" + star + ", add_time=" + add_time + ", group_id=" + group_id + '}'; } public integer getid() { return id; } public void setid(integer id) { this.id = id; } public string getword() { return word; } public void setword(string word) { this.word = word; } public string gettranslation() { return translation; } public void settranslation(string translation) { this.translation = translation; } public string getintroduction() { return introduction; } public void setintroduction(string introduction) { this.introduction = introduction; } public integer getstar() { return star; } public void setstar(integer star) { this.star = star; } public date getadd_time() { return add_time; } public void setadd_time(date add_time) { this.add_time = add_time; } public integer getgroup_id() { return group_id; } public void setgroup_id(integer group_id) { this.group_id = group_id; } }
-
持久层接口wordsdao和实现类wordsdaoimpl(接口类省略)简单使用dbutils包
package com.mypro.dao.impl; import com.mypro.dao.wordsdao; import com.mypro.entity.words; import org.apache.commons.dbutils.queryrunner; import org.apache.commons.dbutils.handlers.beanhandler; import org.apache.commons.dbutils.handlers.beanlisthandler; import java.util.list; public class wordsdaoimpl implements wordsdao { //为注入bean对象添加一个setter方法 private queryrunner runner; public void setrunner(queryrunner runner) { this.runner = runner; } @override public list<words> findall() { try{ return runner.query("select * from words", new beanlisthandler<words>(words.class)); }catch(exception e){ throw new runtimeexception(e); } } @override public words findwordsbyid(integer id) { try{ return runner.query("select * from words where id=?", new beanhandler<words>(words.class), id); }catch (exception e){ throw new runtimeexception(e); } } @override public void insertwords(words words) { try{ runner.update("insert into words(word, translation, introduction, add_time, star, group_id)" + "values(?,?,?,?,?,?)", words.getword(), words.gettranslation(), words.getintroduction(), words.getadd_time(), words.getstar(), words.getgroup_id()); }catch (exception e){ throw new runtimeexception(e); } } @override public void updatewords(words words) { try{ runner.update("update words set word=?, translation=?, introduction=?, add_time=?, star=?, group_id=? " + "where id=?", words.getword(), words.gettranslation(), words.getintroduction(), words.getadd_time(), words.getstar(), words.getgroup_id(), words.getid()); }catch (exception e){ throw new runtimeexception(e); } } @override public void deletewords(integer id) { try{ runner.update("delete from words where id=?", id); }catch (exception e){ throw new runtimeexception(e); } } }
-
bean对象容器mywordbean.xml
<?xml version="1.0" encoding="utf-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xsi:schemalocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <!-- 配置wordsservice对象 --> <bean id="wordsservice" class="com.mypro.service.impl.wordsserviceimpl"> <!-- 注入wordsdao --> <property name="wordsdao" ref="wordsdao"></property> </bean> <!-- 配置wordsdao对象 --> <bean id="wordsdao" class="com.mypro.dao.impl.wordsdaoimpl"> <!-- 注入runner --> <property name="runner" ref="runner"></property> </bean> <!-- 配置queryrunner对象 --> <bean id="runner" class="org.apache.commons.dbutils.queryrunner" scope="prototype"> <!-- 注入数据源 --> <constructor-arg name="ds" ref="datasource"></constructor-arg> </bean> <!-- 配置数据源 --> <bean id="datasource" class="com.mchange.v2.c3p0.combopooleddatasource"> <!-- 连接数据库 --> <property name="driverclass" value="com.mysql.jdbc.driver"></property> <property name="jdbcurl" value="jdbc:mysql://localhost:3306/myword"></property> <property name="user" value="username"></property> <property name="password" value="password"></property> </bean> </beans>
-
测试类wordsservicetest
package com.mypro.test; import com.mypro.entity.words; import com.mypro.service.wordsservice; import com.mypro.service.impl.wordsserviceimpl; import org.junit.before; import org.junit.test; import org.springframework.context.applicationcontext; import org.springframework.context.support.classpathxmlapplicationcontext; import java.util.date; import java.util.list; public class wordsservicetest { private wordsservice wordsservice; @before public void testinit(){ applicationcontext ac = new classpathxmlapplicationcontext("mywordbean.xml"); wordsservice = ac.getbean("wordsservice", wordsservice.class); } @test public void testfindall(){ list<words> all = wordsservice.findall(); for (words words : all) { system.out.println(words); } } @test public void testfindone(){ integer id = 10; words words = wordsservice.findwordsbyid(id); system.out.println(words); } @test public void testinsert(){ date now = new date(); words words = new words(); words.setword("java"); words.settranslation("爪哇"); words.setintroduction("一门编程语言"); words.setadd_time(now); words.setstar(2); words.setgroup_id(1); wordsservice.insertwords(words); system.out.println("success insert!"); } @test public void testupdate(){ date now = new date(); words words = new words(); words.setid(9); words.setword("java web"); words.settranslation("爪哇应用"); words.setintroduction("一门编程语言"); words.setadd_time(now); words.setstar(2); words.setgroup_id(1); wordsservice.updatewords(words); system.out.println("success update!"); } @test public void testdelete(){ integer id = 11; wordsservice.deletewords(id); system.out.println("success delete!"); } }
推荐阅读
-
Maven项目中读取src/main/resources目录下的配置文件的方法
-
mybatis 加载配置文件的方法(两种方式)
-
AndroidManifest.xml配置文件解析
-
java环境变量配置好后双击jar文件无法运行的解决办法
-
Windows环境下的MYSQL5.7配置文件定位图文分析
-
Spring实战之XML与JavaConfig的混合配置详解
-
PHP读取配置文件类实例(可读取ini,yaml,xml等)
-
python开发之基于thread线程搜索本地文件的方法
-
linux修改hostname的配置文件(linux中修改主机名的命令)
-
SpringMVC和Spring的配置文件扫描包详解