Spring 初识框架

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&amp;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方法直接注解到属性上

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值