1.IOC为反转控制,是一种设计思想,能够直接将其理解为一个容器,这个容器能够帮你管理全部的组件,之前建立对象须要手动的new,在Spring中拿对象只须要直接从容器中取出。java
实现方式: private ApplicationContext ioc = new ClassPathXmlApplicationContext("ioc.xml");//可理解为获取IOC容器 Object bean = ioc.getBean("XXX");根据组件ID从IOC容器中取值。
2.IOC容器中的全部组件都在xml中进行注册配置。为对象赋值有三种方式:mysql
1. 用property赋值. <bean id="Student" class="com.Ioctest.Student"> <property name="StudentName" value="小明"> <property name="Age" value="18"> </bean> 2.使用p名称空间赋值,注意须要导入p名称空间. <bean id="Student" class="com.Ioctest.Student" p:age="18" p:StudentName="小明" > </bean> 3.parent继承。等同于子类父类。 <bean id="StudentParent" class="com.Ioctest.Student" abstract="true"> <property name="StudentName" value="小三"></property> <property name="Age" value="20"></property> </bean> <bean id="StudentChild" class="com.Ioctest.Student" parent="StudentParent"> <property name="StudentName" value="小四"></property> //继承后能够对任意值进行修改。 </bean> //切记!!!property中的name必定要和Setter方法后的名字相匹配。如该配置的Set方法应该是 public void SetStudentname()
针对实体类中的list和Map集合,Spring有<list></list>和<Map></Map>标签。例如:假设Student实体类下有Private List<Teacher> teachers。则配置代码应为:sql
<bean id="Teacher02" class="com.Ioctest.Teacher"> <property name="Teachername" value="张老师"> </property> <property name="Age" value="44"> </property> <property name="salary" value="#{5000*12}"> </property> </bean> //#{}功能强大,能够在里面写运算符,bean属性值,调用静态方法或非静态方法 <bena id="Student" class="com.Ioctest.Student"> <property name="teachers"> <list> <bean class="com.Ioctest.Teacher"> <property name="Teachername" value="王老师"> <property name="Age" value="32"> </bean> <bean class="com.Ioctest.Teacher" ref="Teacher02">//ref能够引用外部bean。 <bean class="com.Ioctest.Teacher"value="#{Teahcer02}>//#{}用于引用外部bean </list> </property> </bean>
假设Student实体类中有private Map<String, Object> maps,则配置代码应为:spa
<bean id="Student" class="com.Ioctest.Student"> <property name="maps"> <map> <entry key="key1" value="张三"></entry> <entry key="key2"> <bean class="com.Ioctest.Teacher"> <property name="Teachername" value="王老师"> </property> </bean> </entry> <entry key="Name"> <value>芜湖</value> </entry> //<entry>表明一个键值对 </map> </property> </bean>
<bean id="Student2" class="com.Ioctest.Student"> <constructor-arg name="StudentName" value="小明"></constructor-arg> <constructor-arg name="gender" value="男" index="2"></constructor-arg> <constructor-arg name="age" value="18" type="java.lang.Integer"></constructor-arg> </bean> //注意使用构造器赋值时,实体类中必定要有带参构造器。赋值顺序要参照构造器参数位置。若是想不按顺序能够如代码所示用index=?进行指引。若是但愿进行重载,能够用type="java.lang.Integer"进行重复赋值。
<bean id="Student" class="com.IocTest.Student" autowire="byType/byName/constructor"> //byType/byName/constructor分别对应着经过类型,名字,构造器引入。 </bean>
注解注入配合@AutoWired是最经常使用的注入方式,注解注入只需在xml文件中配置一句须要扫描包package的前缀设计
<context:component-scan base-package="com.IocTest"></context:component-scan>
而后经过@Controller、@Service、@Repository、@Component四种方式进行组件注入。code
引用外部文件最经常使用的就是有关jdbc配置文件的撰写。
外部文件dbconfig.propertiescomponent
jdbc.username=root jdbc.password=123456 jdbc.jdbcUrl=jdbc:mysql://localhost:3306/test jdbc.driverClass=com.mysql.jdbc.Driver
xml代码xml
<context:property-placeholder location="classpath:dbconfig.properties"/>//引入外部文件 <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> <property name="user" value="${jdbc.username}"></property> <property name="password" value="${jdbc.password}"></property> <property name="jdbcUrl" value="${jdbc.jdbcUrl}"></property> <property name="driverClass" value="${jdbc.driverClass}"></property> </bean> //${}能够取出文件中对应的值