Spring七天速成:入门必看(二)_spring期末速成

本文介绍了Spring框架中的Bean工厂创建、注册、配置,以及单例和原型模式的应用。重点讲解了XML配置中的工厂类、工厂方法和不同类型的装配方式,如setter和构造方法注入,以及基于注解的装配。
摘要由CSDN通过智能技术生成
    System.out.println("这是Bean1!");
}

}


### 2.3 创建工厂



> 
>         创建一个工厂,构造方法显示当前实例正在生成,以及创建一个生成类的方法
> 
> 
> 



package com.itheima;

public class MyBeanFactory {
public MyBeanFactory()
{
System.out.println(“bean工厂实例化中!”);
}
public Bean1 createBean()
{
return new Bean1();
}

}


###  2.4 配置applicationContext



> 
>         注意此处将工厂类注册为一个Bean,填写其class后,将再次把工厂类作为一个Bean,使用factory-bean来标明工厂类,且已factory-method标明工厂方法。
> 
> 
> 



<?xml version="1.0" encoding="UTF-8"?>




```

2.5 工厂实例的测试类

使用ApplicationContext作为Spring的容器,将注册的Bean注入,再通过获取Bean来实例化工厂类,以及自动实现工厂方法。

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Test {
    public static void main(String args[])
    {
        ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationBean1.xml");
        System.out.println(applicationContext.getBean("bean1"));
    }
}

2.6 测试结果

三、Bean的作用域

作用域描述
singleton即单例模式,实际只创建一个实例
prototype即原型模式,每次请求都产生一个新的实例
request作用于Web,每一个HTTP请求都会有实例
session作用于Web,每一个HTTPSessioon请求都会有一个实例
global session作用于Web,限定为HTTPSession的生命周期

四、装配方式

4.1 基于XML的setter的注入

即上文中提到的setXX()以及getXX()的方法来进行赋值的方法,较为容易理解。

4.2 基于XML的构造方法的注入

即通过构造方法来对类中的成员变量进行直接的赋值的方法。

4.3 基于注解的装配

当一个项目的Bean过多时,通过XML的装配方式,会使得applicationContext文件中内容较为臃肿,那么此时就可以用到注解来解决相关问题。

以下是常用注解:

注解描述
@Component即一个普通Bean,作用于任何层次
@Controller即控制组件Bean,用于控制层
@Service即业务逻辑Bean,用于业务层
@Repository即数据访问Bean,用于数据访问层
@Scope即Bean实例的作用域
@Value即Bean实例的注入值
@Autowired指自动装配对象
@Resource指要注入的对象
@PostConstruct指实例初始化完成之后调用的方法
@Qualifier自动装配的对象名称,通常与@Autowired联用
@PreDestory指实例销毁前调用的方法

五、注解实例

结构图:

5.1 编写基本类

package com.itheima.entity;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
@Component("user")
@Scope("singleton")
public class User {
    @Value("1")
    private int id;
    @Value("Zhuang San")
    private String name;
    @Value("1234")
    private String password;

    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getPassword() {
        return password;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}

5.2  编写Dao层接口

package com.itheima.Dao;
public interface UserDao {
    public void save();
}

5.3 编写Dao层实现类

package com.itheima.Dao;
import com.itheima.entity.User;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.stereotype.Repository;
@Repository("userDao")
public class UserDaoImpl implements UserDao {
    public void save(){
        ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext2.xml");
        User user=(User) applicationContext.getBean("user");
        System.out.println(user);
        System.out.println("Executing UserDaoImpl.save() ");
    }

}

5.4 编写ServiceDao层

package com.itheima.Service;
public interface UserService {
    public void save();
}

5.5 编写Service实现类

package com.itheima.Service;
import javax.annotation.Resource;
import com.itheima.Dao.UserDao;
import org.springframework.stereotype.Service;
@Service("userService")
public class UserServiceImpl implements UserService{
    @Resource(name="userDao")
    private UserDao userDao;
    public void save(){
        this.userDao.save();
        System.out.println("Executing UserServiceImpl.save()");
    }
}

5.6 编写Controller类

package com.itheima.Controller;
import com.itheima.Service.UserService;
import org.springframework.stereotype.Controller;
import javax.annotation.Resource;
@Controller
public class UserController {
    @Resource(name="userService")
    private UserService userService;
    public void save(){
        this.userService.save();
        System.out.println("Executing UserController.save() ");
    }

}

5.7 编写测试类

import com.itheima.Controller.UserController;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;



**Java面试核心知识点笔记**

其中囊括了JVM、锁、并发、Java反射、Spring原理、微服务、Zookeeper、数据库、数据结构等大量知识点。

![蚂蚁金服(Java研发岗),26岁小伙斩获三面,收获Offer定级P6](https://img-blog.csdnimg.cn/img_convert/60bf41be9467977cc368eca12089df3b.webp?x-oss-process=image/format,png)

**Java中高级面试高频考点整理**

![蚂蚁金服(Java研发岗),26岁小伙斩获三面,收获Offer定级P6](https://img-blog.csdnimg.cn/img_convert/ebb706b8c431d62653435068cf30ecfd.webp?x-oss-process=image/format,png)

![蚂蚁金服(Java研发岗),26岁小伙斩获三面,收获Offer定级P6](https://img-blog.csdnimg.cn/img_convert/b6c1c8ac1e561be29f5ef533a6d7386a.webp?x-oss-process=image/format,png)

**最后分享Java进阶学习及面试必备的视频教学**

![蚂蚁金服(Java研发岗),26岁小伙斩获三面,收获Offer定级P6](https://img-blog.csdnimg.cn/img_convert/610623aa27e05c4c41021e95f223e040.webp?x-oss-process=image/format,png)


xt.support.ClassPathXmlApplicationContext;



**Java面试核心知识点笔记**

其中囊括了JVM、锁、并发、Java反射、Spring原理、微服务、Zookeeper、数据库、数据结构等大量知识点。

[外链图片转存中...(img-Yepf3ajR-1714471702434)]

**Java中高级面试高频考点整理**

[外链图片转存中...(img-uI8zyUgP-1714471702435)]

[外链图片转存中...(img-K6Zq193Y-1714471702435)]

**最后分享Java进阶学习及面试必备的视频教学**

[外链图片转存中...(img-qTPjMZeM-1714471702435)]


> **本文已被[CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】](https://bbs.csdn.net/topics/618154847)收录**
  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值