0


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

-----持续更新Spring入门系列文章-----

如果你也喜欢Java和算法,欢迎订阅专栏共同学习交流!

你的点赞、关注、评论、是我创作的动力!

-------希望我的文章对你有所帮助--------

前言在前篇文章当中我们已经大概了解了Spring的基本原理和简单实例的编写测试,那么本篇将对Spring对于Bean的管理开展进一步的讲解和运用。

一、什么是Bean?

  1. Bean是在Spring中注册的Java类,可以看做是添加到Spring容器里的一个管理对象。只有通过将Java类注册为其中的一个Bean时,也即是getBean()过程,才能使得Spring对其进行下一步管理。

1.1 Bean的配置

属性描述id即Bean对应的唯一标识符name可以有多个名称,用逗号隔开,即代表Bean的内涵或作用class即具体实现类,一般为对象的全路径scopeBean实例的作用范围,如singleton、prototype、request、session

1.2 Bean的常用子元素

元素****描述<constructor-arg>

  • index:用于设置构造参数的序号

  • type:用于指定构造参数类型

  • ref:用于指定参数的值

  • value(同上)

    <property>
  • name:即Bean中成员变量的属性名(username、uid、uadress、usex)

  • value:设定该参数值

  • ref:(同上)

    <value> 即上述两种注入方式对应的子元素的属性参数的赋值 <ref>(同上) ## 二、实例工厂实例化
  1. 工厂实例化,实际上也是将工厂类做为一个Bean注册到Spring容器中,通过控制工厂类来实现对于实例的创建,接下来演示一个实例工厂实例,可以让我们更好的了解工厂模式在Spring中的运作规。

2.1 引入pom依赖

代码略

2.2 创建一个类

  1. package com.itheima;
  2. public class Bean1 {
  3. public Bean1() {
  4. System.out.println("这是Bean1!");
  5. }
  6. }

2.3 创建工厂

  1. 创建一个工厂,构造方法显示当前实例正在生成,以及创建一个生成类的方法
  1. package com.itheima;
  2. public class MyBeanFactory {
  3. public MyBeanFactory()
  4. {
  5. System.out.println("bean工厂实例化中!");
  6. }
  7. public Bean1 createBean()
  8. {
  9. return new Bean1();
  10. }
  11. }

2.4 配置applicationContext

  1. 注意此处将工厂类注册为一个Bean,填写其class后,将再次把工厂类作为一个Bean,使用factory-bean来标明工厂类,且已factory-method标明工厂方法。
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
  5. <bean id="MybeanFactory" class="com.itheima.MyBeanFactory"></bean>
  6. <bean id="bean1" factory-bean="MybeanFactory" factory-method="createBean">
  7. </bean>
  8. </beans>

2.5 工厂实例的测试类

  1. 使用ApplicationContext作为Spring的容器,将注册的Bean注入,再通过获取Bean来实例化工厂类,以及自动实现工厂方法。
  1. import org.springframework.context.ApplicationContext;
  2. import org.springframework.context.support.ClassPathXmlApplicationContext;
  3. public class Test {
  4. public static void main(String args[])
  5. {
  6. ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationBean1.xml");
  7. System.out.println(applicationContext.getBean("bean1"));
  8. }
  9. }

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 编写基本类

  1. package com.itheima.entity;
  2. import org.springframework.beans.factory.annotation.Value;
  3. import org.springframework.context.annotation.Scope;
  4. import org.springframework.stereotype.Component;
  5. @Component("user")
  6. @Scope("singleton")
  7. public class User {
  8. @Value("1")
  9. private int id;
  10. @Value("Zhuang San")
  11. private String name;
  12. @Value("1234")
  13. private String password;
  14. public int getId() {
  15. return id;
  16. }
  17. public void setId(int id) {
  18. this.id = id;
  19. }
  20. public String getName() {
  21. return name;
  22. }
  23. public void setName(String name) {
  24. this.name = name;
  25. }
  26. public void setPassword(String password) {
  27. this.password = password;
  28. }
  29. public String getPassword() {
  30. return password;
  31. }
  32. @Override
  33. public String toString() {
  34. return "User{" +
  35. "id=" + id +
  36. ", name='" + name + '\'' +
  37. ", password='" + password + '\'' +
  38. '}';
  39. }
  40. }

5.2 编写Dao层接口

  1. package com.itheima.Dao;
  2. public interface UserDao {
  3. public void save();
  4. }

5.3 编写Dao层实现类

  1. package com.itheima.Dao;
  2. import com.itheima.entity.User;
  3. import org.springframework.context.ApplicationContext;
  4. import org.springframework.context.support.ClassPathXmlApplicationContext;
  5. import org.springframework.stereotype.Repository;
  6. @Repository("userDao")
  7. public class UserDaoImpl implements UserDao {
  8. public void save(){
  9. ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext2.xml");
  10. User user=(User) applicationContext.getBean("user");
  11. System.out.println(user);
  12. System.out.println("Executing UserDaoImpl.save() ");
  13. }
  14. }

5.4 编写ServiceDao层

  1. package com.itheima.Service;
  2. public interface UserService {
  3. public void save();
  4. }

5.5 编写Service实现类

  1. package com.itheima.Service;
  2. import javax.annotation.Resource;
  3. import com.itheima.Dao.UserDao;
  4. import org.springframework.stereotype.Service;
  5. @Service("userService")
  6. public class UserServiceImpl implements UserService{
  7. @Resource(name="userDao")
  8. private UserDao userDao;
  9. public void save(){
  10. this.userDao.save();
  11. System.out.println("Executing UserServiceImpl.save()");
  12. }
  13. }

5.6 编写Controller类

  1. package com.itheima.Controller;
  2. import com.itheima.Service.UserService;
  3. import org.springframework.stereotype.Controller;
  4. import javax.annotation.Resource;
  5. @Controller
  6. public class UserController {
  7. @Resource(name="userService")
  8. private UserService userService;
  9. public void save(){
  10. this.userService.save();
  11. System.out.println("Executing UserController.save() ");
  12. }
  13. }

5.7 编写测试类

  1. import com.itheima.Controller.UserController;
  2. import org.springframework.context.ApplicationContext;
  3. import org.springframework.context.support.ClassPathXmlApplicationContext;
  4. public class AnnotationText {
  5. public static void main(String args[]){
  6. ApplicationContext applicationContext= new ClassPathXmlApplicationContext("applicationContext2.xml");
  7. UserController userController=(UserController) applicationContext.getBean("userController");
  8. userController.save();
  9. }
  10. }

5.8 测试结果

六、总结

  1. 本期文章主要是关于Bean的基本装配的了解,以及基于注解实现实例的讲解,对于Spring的运用也有更加深刻的理解,下次再见!

感谢爱学习的你看到了最后,点个赞、关注支持一下吧!

标签: spring java 后端

本文转载自: https://blog.csdn.net/m0_55278347/article/details/127933306
版权归原作者 kook小辉的进阶 所有, 如有侵权,请联系我们删除。

“Spring七天速成:入门必看(二)”的评论:

还没有评论