Spring的优缺点
优点:
1:开发人员可以只关注整个结构中的其中某一层;
2:可以很容易的用新的实现来替换原有层次的实现;
3:可以降低层与层之间的依赖;
4:有利于标准化;
5:利于各层逻辑的复用。
6:结构更加的明确
7:在后期维护的时候,极大地降低了维护成本和维护时间
缺点:
1:降低了系统的性能。这是不言而喻的。如果不采用分层式结构,很多业务可以直接造访数据库,以此获取相应的数据,如今却必须通过中间层来完成。
2:有时会导致级联的修改。这种修改尤其体现在自上而下的方向。如果在表示层中需要增加一个功能,为保证其设计符合分层式结构,可能需要在相应的业务逻辑层和数据访问层中都增加相应的代码。
在项目下导入jar包和schema文件夹
schema文件夹
spring-beans-3.2.xsd
spring-context-3.2.xsd
在src下面导入bean.xml
bean.xml的名字并没有固定,只要是xml文件就可以了。
配置bean.xml
要写Student实体类,这个类里要包括无参的构造函数。
<bean name="stu" class="com.huihui.ioctest.Student" scope="prototype">
<property name="name"> <value>tom</value> </property> </bean>
测试配置是否正确,只需要写test类里面有main方法就可以了。
ApplicationContext ac=new ClassPathXmlApplicationContext("bean.xml");
Student stu=(Student) ac.getBean("stu");
System.out.println(stu);
例子1
1,构建包com.briup.bean在包下构建Address类,属性如下:
private String city;
private String street;
private String country;
在包下构建Person类,属性如下:
private int sNo;
private String name;
private boolean gender;
private int age;
private Address address;
提供get和set方法,重写toString方法,输出当前对象字符串表达形式
2,使用Set方式完成一下要求:
完成基本类型以及对象类型的装配操作
1)构建包com.briup.ioc.set
2)在包下构建set.xml
配置文件使用set方式注入完成Person类中Address属性和其他基本属性的注入
3)完成之后,使用bean设置Student的别名并修改相关文件测试
set.xml
<bean name="Address" class="com.huihui.bean.Address">
<property name="city"> <value>city</value> </property>
<property name="street"> <value>street</value> </property>
<property name="country"> <value>country</value> </property>
</bean>
<alias name="Address" alias="a" />
<bean name="Person" class="com.huihui.bean.Person">
<property name="address" ref="a"></property>
<property name="sNo"> <value>111111</value> </property>
<property name="name"> <value>sNoname</value> </property>
<property name="gender"> <value>true</value> </property>
<property name="age"> <value>12</value> </property>
</bean>
Test
String path = "com/huihui/ioc/set/set.xml";
ApplicationContext ac =new ClassPathXmlApplicationContext(path);
Person sb = (Person) ac.getBean("Person");
System.out.println(sb);
System.out.println(sb.getAddress());
例子2
集合的装配操作
1)在com.briup.bean中构建结合类CollBean,属性如下,并提供get/set方法
private List<String> lists;
private String[] arrays;
private Set<String> sets;
private Map<Integer, String> maps;
private Properties pros;
2)构建包com.briup.ioc.coll
3)在包下构建coll.xml配置文件完成各种集合属性的注入
coll.xml
<bean name="CollBean" class="com.huihui.bean.CollBean">
<property name="lists">
<list>
<value>list1</value>
<value>list2</value>
<value>list3</value>
</list>
</property>
<property name="sets">
<set>
<value>set1</value>
<value>set1</value>
<value>set3</value>
</set>
</property>
<property name="maps">
<map>
<entry key="1">
<value>value1</value>
</entry>
<entry key="2">
<value>value2</value>
</entry>
</map>
</property>
<property name="pros">
<props>
<prop key="key1">prop1</prop>
<prop key="key2">prop2</prop>
<prop key="key3">prop3</prop>
</props>
</property>
</bean>
Test
String path = "com/huihui/ioc/coll/coll.xml";
ApplicationContext ac =new ClassPathXmlApplicationContext(path);
CollBean sb = (CollBean) ac.getBean("CollBean");
sb.printInfo();
CollBean
public void printInfo(){
System.out.println("sets");
System.out.println(sets);
Set proSet=pros.entrySet();
Iterator it=proSet.iterator();
while(it.hasNext()){
Map.Entry entry1=(Entry) it.next();
System.out.println("pros key"+entry1.getKey());
System.out.println("pros value"+entry1.getValue());
}
}
构造器注入
<bean name="DateBean" class="com.huihui.bean.DateBean">
<constructor-arg type="int" value="25"></constructor-arg>
<constructor-arg type="int" value="2"></constructor-arg>
<constructor-arg type="int" value="100"></constructor-arg>
</bean>
第二种方式
<constructor-arg index="2">
<value>30</value>
</constructor-arg>
<constructor-arg index="0">
<value>200</value>
</constructor-arg>
<constructor-arg index="1">
<value>lily</value>
</constructor-arg>