spring-ioc学习笔记

Spring学习笔记

1.什么是Spring?

  • Spring框架是由于软件开发的复杂性而创建的。
  • Spring使用的是基本的JavaBean来完成以前只可能由EJB完成的事情。
  • Spring的用途不仅仅限于服务器端的开发。从简单性、可测试性和松耦合性角度而言,绝大部分Java应用都可以从Spring中受益。</pre>

特点:

◆目的:解决企业应用开发的复杂性

◆功能:使用基本的JavaBean代替EJB,并提供了更多的企业应用功能

◆范围:任何Java应用

Spring是一个轻量级控制反转(IoC)和面向切面(AOP)的容器框架。

Spring 有两个核心部分:IOC 和 Aop

2.IOC

  • 控制反转(Inversion of Control,缩写为IoC),是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度。其中最常见的方式叫做依赖注入(Dependency Injection,简称DI),还有一种方式叫“依赖查找”(Dependency Lookup)。

  • 通过控制反转,对象在被创建的时候,由一个调控系统内所有对象的外界实体将其所依赖的对象的引用传递给它。也可以说,依赖被注入到对象中。

  • IoC可以认为是一种全新的设计模式,但是理论和时间成熟相对较晚,并没有包含在GoF中。

1.IOC操作JAVABean管理

  • ****Bean 管理指的是两个操作 (1)Spring 创建对象 (2)Spirng 注入属性****

  • ****Spring有两种方式操作JAVABean管理 (1) 基于注解 (2) 基于XML配置******

(1)基于XML方式

创建对象


public class Book {

 public void sout(){
 System.out.println("aaaa");
 };
}

创建SpringXML

<beans xmlns="http://www.springframework.org/schema/beans"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

</beans>

在XML中配置javaBean


<!-- 配置Spring对象-->  <bean id="book" class="com.company.User"></bean> 

使用 bean 标签,标签里面添加对应属性,就可以实现对象创建

在 bean 标签有很多属性,介绍常用的属性

  • id 属性:唯一标识

  • class 属性:类全路径(包类路径)

  • 创建对象时候,默认也是执行无参数构造方法完成对象创建

    属性注入(XML方式)

    1.第一种用set方法进行属性注入

    首先创建类的方法


    public class Book {
     private String name;
     private String author;
    
     public void setName(String name) {
     this.name = name;
     }
     public void setAuthor(String author) {
     this.author = author;
     }

     public void sout()
     {
     System.out.println(name+" "+author);
     }
    }
**在XML中进行属性注入**
   <!-- 第一种set注入方式-->
     <bean id="book" class="com.company.Book">
     <!-- 使用property完成属性注入
     name:类里面属性名称
     value:向属性注入的值-->
     <property name="name" value="九阴真经"></property>
     <property name="author" value="林书平"></property>
     </bean>
2.用有参构造注入属性

首先创建对象的有参构造方法
    public class Book {

     private String name;
     private String author;

     public Book(String name, String author) {
     this.name = name;
     this.author = author; 
     }
    }
**在XML中进行属性注入**
  <!-- 第二种构造函数方式-->
     <bean id="book" class="com.company.Book">
     <constructor-arg name="name" value="葵花宝典"></constructor-arg>
     <constructor-arg name="author" value="林书平"></constructor-arg>
     </bean>
**注意:**xml注入其他类型属性**
null 值
   <property name="address">
    <null/>
   </property>
属性值包含特殊符号
    <!--两种方法
    1 转义 < &lt; > &gt;
    2 把带特殊符号内容写到 CDATA
    -->
    <property name="address">
    <value><![CDATA[<<内容>>]]></value>
    </property>
****3.注入外部Bean属性****

**(1)创建两个类 service 类和 dao 类**

**(2)在 service 调用 dao 里面的方法**

**(3)在 spring 配置文件中进行配置**

**首先创建Bean**

**Dao**
    public interface UserDao {
     public void add();
    }

    public class UserDaoImpl implements UserDao{
     private String name;
     public void setName(String name) {
    this.name = name;
     }

     @Override
     public void add() {
     System.out.println("UserDaoImpl......."+" "+name);
     }
    }
**Service**
    import com.company.Dao.UserDao;

    public class UserService {
     //创建属性
     private UserDao userDao;

     //创建set方法
     public void setUserDao(UserDao userDao) {
     this.userDao = userDao;
     }
     public void add()
     {
     System.out.println("UserService.....");
     userDao.add();
     }
    }
**在XML中这样配置**
    <!-- 外部bean注入-->
     <bean id="userService" class="com.company.Service.UserService">
     <!--注入 userDao 对象
     name 属性:类里面属性名称
     ref 属性:创建 userDao 对象 bean 标签 id 值 -->
     <property name="userDao" ref="userDao" ></property>
     <!--给userDao的name注入属性-->
     <property name="UserDao.name" value="sss"></property>
     </bean>
     <bean id="userDao" class="com.company.Dao.UserDaoImpl"></bean>
    </beans>
**4.注入集合类型属性**

**注入数组类型属性  注入 **List** 集合类型属性  注入 **Map** 集合类型属性  (1)创建类,定义数组、list、map、set 类型属性,生成对应 set 方法**
    import java.util.List;
    import java.util.Map;
    
    public class Book2 {
     private List<String> list;
     private Map<String, String> map;
  
     public void setList(List<String> list) {
     this.list = list;
     }
     public void setMap(Map<String, String> map) {
     this.map = map;
     }
  
     public void sout()
     {
     System.out.println(list+" "+map);
     }
    }
**xml配置**
<!--    集合注入-->
    <bean id="book2" class="com.company.Book2" init-method="InitMend">
     <property name="list">
     <list>
     <value>Java</value>
     </list>
     </property>
     <property name="map">
     <map>
     <entry key="JS" value="牛逼"></entry>
     </map>
     </property>
    </bean>
**(2)基于注解方式**

**什么是注解?**

**(1)注解是代码特殊标记。**

**(2)使用注解,注解作用在类上面,方法上面,属 性上面。**

**(3)使用注解目的:简化 xml 配置。**

****Spring** 针对 **Bean** 管理中创建对象提供注解**

**(1)@Component**

**(2)@Service**

**(3)@Controller**

**(4)@Repository**

**第一步引入相关依赖**
spring01.png
**第二步开启组件扫描**

    import org.springframework.stereotype.Component;

    @Component(value = "userService")
   public class UserService {

    public void add(){
     System.out.println("UserService创建了");
     }
    }
**测试**
package com.CodeChao.text;

    import com.CodeChao.Config.SpringConfig;
    import com.CodeChao.Service.UserService;
    import org.junit.Test;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.annotation.AnnotationConfigApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;

    public class text {
    
     @Test
     public void T1()
    {
     ApplicationContext context=new ClassPathXmlApplicationContext("Bean.xml");
 
     UserService userService = context.getBean("userService", UserService.class);

     userService.add();

     }
    }
**基于注解方式实现属性注入  @Autowired:根据属性类型进行自动装配**

**@Qualifier:根据名称进行注入**

**@Resource:可以根据类型注入,可以根据名称注入**

**第一步 把 service 和 dao 对象创建,在 service 和 dao 类添加创建对象注解**

**第二步 在 service 注入 dao 对象,在 service 类添加 dao 类型属性,在属性上面使用注解**

**创建UserDao对象
package com.dao;
    import org.springframework.stereotype.Component;

    //使用注解配置javaBean
    @Component
    public class UserDao {

     public void sout()
     {
     System.out.println("UserDao-------");
     }
    }
**创建Service**
package com.Service;

    import com.dao.UserDao;
    import org.springframework.beans.factory.annotation.Autowired;
    
    @org.springframework.stereotype.Service
    public class Service {
     //基于注解属性注入
    @Autowired
     private UserDao userDao;

     public void add()
     {
     System.out.println("service-------");
     //调用UserDao的方法
     userDao.sout();
     }
    }
**测试**
   
    import org.junit.Test;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;

    public class test {

        @Test
        public  void t1()
        {
            ApplicationContext context =new ClassPathXmlApplicationContext("bean.xml");

            Service userService = context.getBean("service", Service.class);

            userService.add();
        }

    }
**到这里Spring-IOC就结束了!!! 感谢观看~~~**
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,772评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,458评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,610评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,640评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,657评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,590评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,962评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,631评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,870评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,611评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,704评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,386评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,969评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,944评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,179评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,742评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,440评论 2 342

推荐阅读更多精彩内容