spring初学 day01

1 spring 介绍,以及spring 框架的优势

spring框架是一个企业级的轻量级框架,低倾入的框架(也是后期项目维护,修改代码量比较少)
优势: 1:其实spring 就是一个大工厂模式(生产管理实体bean,不用实例化对象,所有的都是通过spring容器来进行管理)
2:支持分布式事务(原子性,一致性,隔离性,持久性)
3:支持测试,与jutext测试有良好的结合;
4:与其他框架的结合度比较好(ssh,ssm)
5:支持我们企业级的api的开发(邮箱,任务调度) (超级重要)

2 spring 各个模块的介绍

bean(管理和生产对象)
core(提供一些核心的基础服务)
context(提供api开发)Spring的分层架构在这里插入图片描述

3搭建spring框架的步骤


1:导入核心的jar包
在这里插入图片描述

2:导入核心配置文件(applicationContext.xml)
<?xml version="1.0" encoding="UTF-8"?>



<context:component-scan base-package=“com.offcn.service,com.offcn.dao” />

	3:测试

## 4 控制反转(ioc)
 概念:控制反转就是应用本身不负责依赖对象的创建和维护,依赖对象的 创建及维护是由外部容器负责的。这样控制权就由应用转移到了外部容器,控制器转移 所谓反转,目的更好的扩展性和良好的维护性。
 代码:
 创建一个boy对象
 

public class Boy {
public void say(){
System.out.println(“站着说话”);
}

在Spring容器中定义


 使用app测试
       ApplicationContext app=new ClassPathXmlApplicationContext("appliactionContext.xml" );
      //得到具体的实体bean,这个参数就是你配置文件里的id
    Boy boy= (Boy)app.getBean("boy");
     boy.say();*

##5.依赖注入(以及几种配置文件加载方式)

 (动态的实例化对象,用到的时候,实例化对象)
 加载spring容器有三种方式
  第一种是实现接口的方式;
  第二种是静态工厂的方式;
  第三种使用BeanFactory
/动态生成某个对象的步骤,给其set方法,配置引入对象<property name="boy" ref="boy"></property>
 获取有三种方式

//第一种
ApplicationContext app=new ClassPathXmlApplicationContext(“appliactionContext.xml” );
//得到具体的实体bean,这个参数就是你配置文件里的id
Boy boy= (Boy)app.getBean(“boy”);
boy.say();*


  //第二种获取全路径
/*    //
    ApplicationContext app2=new FileSystemXmlApplicationContext("C:\\Users\\Administrator\\IdeaProjects\\untitled\\src\\appliactionContext.xml");

//工厂方式
//这三种方式 用的最多是第一种
/* BeanFactory app=new XmlBeanFactory(new FileSystemResource(“C:\Users\Administrator\IdeaProjects\untitled\src\appliactionContext.xml”));


依赖注入:在运行周期内,由外部容器动态的将依赖对象注入到另一个对象组件中
例;
创建boy类:同上
创建Girl类:

public class Girls {
private Boy boy=null;
//调用男孩

public void setBoy(Boy boy) {
    this.boy = boy;
}

public void kiss(){
  boy.say();
}

}

(2)在Spring容器中定义




其中 name指girl在对象中的set方法的属性名称;
ref指容器创建的对象注入到set方法中
最后测试 同上


## 6.三种实例化bean的方式(使用p命名空间来进行赋值)

1,非静态方法
接口
`public  interface UserService {
    public  void  eat();
}`
实现类
public class UserServiceImpl implements UserService {

    @Override
    public void eat() {
        System.out.println("正在吃饭");
    }


}

在容器中定义

```

进行测试

ApplicationContext app=new ClassPathXmlApplicationContext("appliactionContext.xml" );
       UserServiceImpl userService= (UserServiceImpl) app.getBean("userService");
       userService.eat();

2.静态方式。
(1).在spring中定义

<bean id="userObject" class="com.offcn.utils.UserObject" factory-method="creatUserService"></bean

(2).在userObject中提供一个静态方法;

  public static iuserService creatUserService() {
        return new UserServiceimpl() ;
    }

(3).进行测试
3.用工厂方式方法模式
(1)。在spring中定义。

<bean id="userObject" class="com.offcn.utils.UserObject"></bean>

    <bean id="user" factory-bean="userObject" factory-method="creatUserService"></bean>

(2)其他同上。

7.依赖注入 手动装配(set 构造)

(1)基本

 <bean id="person" class="pojo.Person" p:pid="123" p:pname="xyc"></bean>

注意p
(2)。各种类型的手动装配

<bean id="userObject" class="com.offcn.utils.UserObject">
    <property name="sid" value="11"/>
    <property name="sname" value="xyc"/>
     <property name="person" ref="person"/>
     
    <property name="list" >
        <list>
            <value>li</value>
            <value>zhang</value>
            <value>wang</value>
            <value>zhao</value>
        </list>
    </property>
    
    <property name="set">
        <set>
            <value>赵云</value>
            <value>刘备</value>
            <value>关羽</value>
            <value>张飞</value>
        </set>
    </property>
    
    <property name="map">
        <map>
            <entry key="01">
                <value>哈哈</value>
            </entry>
            <entry key="02">
                <value>呵呵</value>
            </entry>
            <entry key="03">
                <value>嘻嘻</value>
            </entry>
        </map>
    </property>
    
    <property name="objects">
        <array>
            <value>谭杰明</value>
            <value>张清</value>
        </array>
    </property>
    
</bean>

(2)。通过构造方法注入。

<bean id="student" class="pojo.Student">
    <!--用构造来进行值的注入,第一个方法是通过索引,这个索引是从0开始-->
    <constructor-arg name="sid" value="11"></constructor-arg>
    <constructor-arg name="sname" value="xyc"></constructor-arg>
    <constructor-arg name="spwd" value="233"></constructor-arg>

</bean>

8.第二种方式是注解注入(在jdk1.6以上)

(1)引入context命名空间,配置xml信息。
创建dao,daoimpl,service,serviceimpl。
在ServiceImpl中写入注释
@Autowired注释按默认类型进行装配
(2)用自动装配,

用自动装配
   @Autowired
    @Qualifier("userDao")
    private UserDao userDao;

(3)用set方法按照名称来

 @Autowired
   private UserDao userDao;

    public void setUserDao(@Qualifier("userDao")UserDao userDao) {
        this.userDao = userDao;
    }


(4)最终版,用java的注解来进行装配 ,JDK1.6以上。

  @Resource
private UserDao userDao;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值