Spring_Bean对象的注册和注入

目录

1.创建Spring项目

1.1创建一个Maven项目 

1.2添加spring的框架支持

2.存储Bean对象

2.1创建Bean对象

2.2将对象注册到容器当中

3.获取并使用Bean对象

3.1获取spring上下文对象

3.2获取指定的Bean对象

3.3使用Bean对象 

更简单的存储和读取对象

1.前置工作——配置扫描路径

​2.添加注解存储Bean对象 

2.1为什么有这么多注解

2.2Controller(控制器存储)

2.3注意Bean的命名

2.4方法注解

2.5可以通过name属性给Bean重命名

3.对象的注入

3.1属性注入

3.2构造方法注入

4.@Resource:另一种注入关键字


1.创建Spring项目

1.1创建一个Maven项目 

1.2添加spring的框架支持

在pom.xml中添加框架支持的依赖:

<dependencies>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>5.2.3.RELEASE</version>
    </dependency>

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-beans</artifactId>
        <version>5.2.3.RELEASE</version>
    </dependency>
</dependencies>    

从配置看,添加的框架有,spring-context: spring 上下文,spring-beans: 管理对象模块

2.存储Bean对象

存储Bean对象主要分为两步:

  1. 如果存在Bean对象则直接使用,没有则需要创建Bean对象
  2. 将Bean对象注册到容器当中

2.1创建Bean对象

Bean对象在Java中来说,就是一个普通对象 ,我们创建一个普通的对象即可。

public class User {
    public String sayHi(String name) {
        return name + " hello!";
    }
}

 2.2将对象注册到容器当中

在创建好的项目中添加 Spring 配置文件 spring-config.xml,将此文件放到 resources 的根目录下,如下图所示:

具体配置内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<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>

再将User对象注册到spring中就可以具体操作如下:

<beans>
    <bean id="user" class="com.bit.User"></bean>
</beans>

 此时就是将Bean对象注册到spring中了。

3.获取并使用Bean对象

获取并使用Bean对象分为三个步骤:

  1. 得到spring上下文对象,因为所有的Bean对象都由spring管理,所以要获取,就首先要获取到spring的上下文
  2. 通过spring上下文,获取一个指定的Bean对象
  3. 对对象进行使用

3.1获取spring上下文对象

 ApplicationContext context = new ClassPathXmlApplicationContext(
            "spring-config.xml");

除了使用ApplicaitonContext,还可以使用BeanFactory

BeanFactory beanFactory = new XmlBeanFactory(new ClassPathResource(
        "springconfig.xml"));

ApplicationContext 和 BeanFactory 效果是一样的,ApplicationContext 属于 BeanFactory 的子类

3.2获取指定的Bean对象

  ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");
        User user = (User) context.getBean("user");
        System.out.println(user);

 此时就获取到了所注册到spring中的Bean对象。

注意:

3.3使用Bean对象 

 User user = (User) context.getBean("user");
        System.out.println(user.sayHi("悟空!!!"));
        System.out.println(user);
    }

更简单的存储和读取对象

 之前我们已经了解了spring读取和存储对象的操作了,相对来说比较简单,但是其中一些操作还是比较复杂。所以我们学习更加简答的方法来实现存储和读取——注解

1.前置工作——配置扫描路径

要将对象成功存储到spring,首先要配置正确的路径。只有被配置包下的所有类,添加了注解才能被正确的识别并保存到spring中。

在 spring-config.xml 添加如下配置:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:content="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
    <!--设置需要存储到spring中的bean根目录-->
    <content:component-scan base-package="com.example"></content:component-scan>
</beans>

2.添加注解存储Bean对象 

添加注解存储对象主要分为两种类注解和方法注解

类注解:

  • Controller(控制器存储):做web开发使用,专门对web的请求响应进行处理
  • Service(服务存储):做业务逻辑,为项目提供服务
  • Repository(仓库存储):做数据访问操作,一般指操作数据库
  • Component(组件存储):值一般组件,如果不属于以上三个功能,就是用这个注解
  • Configuration(配置存储):企业级/大型项目启动时,需要加载配置很多东西,就需要用到

方法注解:

  • Bean:将所需要存储的方法进行注解

2.1为什么有这么多注解

不同的注解可以表明每一个类不同的作用,就如车牌一样,不同地区的车牌不一样,很容易区分。同样的注解也是达到这个目的,就可以明白每个类的作用是什么样的,编程人员一目了然。

2.2Controller(控制器存储)

演示Controller,其余的四个类注解工作方式一样

@Controller
public class UserController {
    public void sayHi(String name){
        System.out.println("Hi  " + name + "!!!!");
    }
}
ApplicationContext context = new AnnotationConfigApplicationContext("com.example");
UserController userController = (UserController) context.getBean("userController");
userController.sayHi("UserController");
System.out.println(userController);

 其他四个类注解可以用同样的方式来实现

2.3注意Bean的命名

由于我们创建Beany一般都用的是大驼峰命名,所以在我们获取的时候就可以直接小写首字母就可

但是如果Bean的命名并非驼峰式,再使用小写首字母,就会出现报错 :

所以此时要明白,如果出现这种情况,那么就两个字母都要大写:

2.4方法注解

@Component
@Data
public class User {
    private String name;
    private int age;
    
    @Bean
    public User u1(){
        User user = new User();
        user.setName("张三");
        user.setAge(20);
        return user;
    }
}

此时主方法就可以直接通过方法名获取方法

 

注意 :方法注解一定搭配类注解来使用,不然会直接报错!!!

上述代码,有我们熟悉的代码,但是其中一个注解不了解,那就是@Data注解!

@Data//这是lombok注解,可以自动生成属性的getter/setter,equals/hashcode,toString

如果加上该注解,就可以省去我们自己手动编写getter/setter等方法。

 2.5可以通过name属性给Bean重命名

  @Bean(name = {"u2"})
    public User u1(){
        User user = new User();
        user.setName("张三");
        user.setAge(20);
        return user;
    }



        User u1 = (User) context.getBean("u2");
        System.out.println(u1);

此时就可以通过访问u2来获取Bean 

 

3.对象的注入

对象的注入主要分为两种:

  • 属性注入
  • 构造方法注入

 属性注入是使用 @Autowired 实现的.

 3.1属性注入

例如将User属性注入到Person

@Component
public class Person {

    @Autowired
    private User user;

    public User getUser() {
        return user.u1();
    }
}



        Person person = (Person) context.getBean("person");
        System.out.println(person.getUser());

 此时是通过获取Person对象,然后间接获取到了User对象,这说明注入成功。

3.2构造方法注入

@Component
public class Person {
    private User user;


    @Autowired
    public Person(User user){
        this.user = user;
    }
}

其实还有第三种方法,是setter注入,和构造方法注入类似,就是将属性作为setter的参数来使用

4.@Resource:另一种注入关键字

他和@Autowired关键字的作用相同,都是注入注解,

两者不同的点是:

  1. 来源不同: @Autowired是来自spring,而@Resource是来源于JDK
  2. 使用时设置参数不同:相比于@Autowired,@Resource更加的灵活,可以设置更多的参数,比如设置不同的name ,可以根据名称来获取。 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值