Spring 初识框架
前些日子学习了Mybatis持久层框架,随后便写了一个小项目,关于Mybatis 学习和Lay-ui学习的 在后面要求自己补上。现在先写下来对Spring框架的认知。
1.总结认知
Spring是一个设计层面的框架,他解决的是业务逻辑层和其他各层的松耦合问题,因此它将面向接口的编程思想贯穿整个系统应用。
1.控制反转IOC:Inversion of control 控制对象产生的权利反转到spring ioc
2.依赖注入DI:Dependency injection 依赖spring ioc注入对象
使用控制反转:
1.导入jjar包,最少需要以下几种:
spring-beans-*.jar
spring-context-*.jar
spring-core-*.jar
spring-expression-*.jar
spring-aop-*.jar(4.0以上)
commons-logging-*.jar(apache struts)
2.创建名为ApplicationContrext.xml文件并配置(‘名字是通俗约定的,没有强制要求’)
创建表头
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
</beans>
接下来继续配置,实体类Student,注入值,
Spring注入方法有:
SET注入
属性注入
构造注入
采用p:属性=‘值’ OR p:属性-ref=“方式注入”
(需要引入头7.4.2,下的帮助文档章节)
就是下面这段。
xmlns:p="http://www.springframework.org/schema/p"
<!--set注入 -->
<!-- <bean id="student" class="com.cssl.pojo.Student">
<property name="stuid" value="110"/>
<property name="stuname" value="小弟弟"/>
<property name="list">
<list>
<value>list1</value>
<value>list2</value>
</list>
</property>
</bean> -->
<!--构造函数入 -->
<!-- <bean id="student" class="com.cssl.pojo.Student">
<constructor-arg name="stuid" value="118" index="0"></constructor-arg>
<constructor-arg name="stuname" value="小朋友" index="1"></constructor-arg>
</bean> -->
<!--p命名空间注入 -->
<bean id="student" p:stuid="500" p:stuname="小屁孩"
init-method="init" destroy-method="destroy"
class="com.cssl.pojo.Student" >
</bean>
``
下面还有一些特殊字符的注入:
```java
<!-- H&M -->
<property name="sb1">
<value>H&M</value>
</property>
<property name="sb2">
<value><![CDATA[H&M]]></value>
</property>
<!--set集合 -->
<property name="set">
<set>
<value>set1</value>
<value>set2</value>
<value>set3</value>
</set>
</property>
<!--map集合 -->
<property name="map">
<map>
<entry>
<key>
<value>map键1</value>
</key>
<value>map值1</value>
</entry>
<entry key="map键2" value="map值2"/>
</map>
</property>
<!-- 配置文件 -->
<property name="pros">
<props>
<prop key="driver">com.mysql.jdbc.Driver</prop>
<prop key="url">jdbc.mysql://localhost:3006/test</prop>
<prop key="user">root</prop>
</props>
</property>
<!--注入""字符串 -->
<property name="emptyString">
<value></value>
</property>
<!-- 注入null -->
<property name="nullString">
<null></null>
</property>
3.现在可以创建JUnit来测试值是否注入成功了
//1.创建ApplicationContext对象,参数放配置文件名,可以放多个用数组
ApplicationContext context =
new ClassPathXmlApplicationContext(new String[] {"applicationContext.xml"});
//通过对象获取实例
DemoZhuRu bean = context.getBean("demoZhuRu", DemoZhuRu.class);
//输出bean
[sb1=H&M, sb2=H&M, list=[list1, list2, list3],
set=[set1, set2, set3],
pros={user=root, url=jdbc.mysql://localhost:3006/test,
driver=com.mysql.jdbc.Driver},
map={map键1=map值1, map键2=map值2},
emptyString=, nullString=null
以上就可以获取Student实例对象了,但是单例的,获取的都会是同一个对象
//在bean 加上scope属性
<!-- scope="prototype" 原型类型可以创建不同对象
默认为singleton 单例模式
bean的生存范围:scope 属性 默认singleton
其他:prototype(原型)、(WEB)request session application…
注解注入annotation:(4.0以上依赖aop包)
1、配置xml的context头(参考文档7.9)
context:annotation-config/(可选,被componet-scan集成)
<context:component-scan base-package=“com.cssl”/>(必须有)
2、@Autowired默认是byType,如果找到多个类型匹配的,则按byName进行注入,如果还找不到对应bean,则报异常
3、多个类型在set方法上或者方法的参数前加 @Qualifier(“id的名称”)
4、@Resource(name=“udao”) 默认是byName,没有则按byType,byType又有多个则异常
name属性解析为bean的名字,而type属性则解析为bean的类型
@Resource(name=“usersDao”,type=UsersDaoImpl.class)
5、@Component, @Repository, @Service, @Controller效果一样,默认id为类名首字母小写
6、@PostConstruct(init-method) and @PreDestroy(destroy-method)
7、@Scope(“prototype”)
8、@Value()注入固定值spEl
注解可以不写set方法直接注解到属性上