Spring 的特性:非侵入式、控制反转、依赖注入、面向切面编程、容器、组件化、一站式
在spring中对对象的实例化操作与以往的不同,需要在配置文件中进行配置,配合注入完成实例化对象。配置文件及applicationContext.xml和beans中的各种jar包路径。
新建class对象 cn.th.model.User2,属性:
private String name;
private Byte age;
private Car car;
生成setting,getting,toString等方法后进行实例化操作。
<bean id=”user”name=“user01” class=”cn.th.model.User2” /> // id ,name不能被重复 (在同一个配置文件中不能重复,不同配置文件中可以重复) 类User2被实例化,其属性没有赋值。
我们可以在其他类中,通过id、name获取这个类,如果没有声明id,name,则可以通过完整类名+#+在bean中同一类实例化中的序号 来获取想要的类。
属性赋值:
<bean id="personSpringEl" class="cn.th.model.User2">
<property name="name" value="#{personconstructorIndex.name}"/>
<property name="age" value="#{personconstructortype.age}"/>
<property name="car" value="#{personconstructorIndex2.car}"/>
</bean>
Spring El表达式 #{},可以通过id或name或 完整类名加序号 . 属性 获取属性值
不通过el表达式 的属性赋值:
<bean class="cn.th.model.User">
<property name="name" value="谭辉"/>
</bean>
对于属性赋值有不同的几种方式,1.通过 Setting,类只能有一个无参构造器,spring会通过无参构造器实例化类,在通过setting对属性赋值,
- 通过 type ,spring依据有参构造器中参数的类型 对属性进行赋值,有歧义
- 通过 index ,spring依据有参构造器中参数的序号 对属性进行赋值,有歧义
- 通过 name ,spring依据有参构造器中参数的name 对属性进行赋值,有歧义
因为后三种有歧义,可以相互配合使用在bean中,以消除歧义
对特殊属性的注入,(array,list,set,map,properties)
<bean class=”cn.th.model.User”>
<property name=”array”>
<array><value>1</value><value>2</value></array>
</property>
</bean>
<bean class=”cn.th.model.User”>
<property name=”list”>
<list ><value>1</value><value>2</value></list>
</property>
</bean>
<bean class=”cn.th.model.User”>
<property name=”set>
<set ><value>1</value><value>2</value></set>
</property>
</bean>
<bean class=”cn.th.model.User”>
<property name=”map”>
<map ><entry key=”1” value=”2”></entry></map>
</property>
</bean>
<bean class=”cn.th.model.User”>
<property name=”properties”>
<porps><porp key=”1”>1</porp><porp key=”2”>2</porp></porps >
</property>
</bean>