spring组件---1

5.29日:
spring认为所有的组件都应该放在ioc容器中,组件之间的关系通过容器进行自动装配,也就是我们所说的依赖注入。

@Cconfiguration&@Bean. 给容器中添加组件

原来的实现方式:
写一个person类,实现getter和setter方法,tostring方法
public class Person {

private String name;
private Integer age;

。。。。。。。}

写一个beans.xml配置文件:在里面用bean 标签指定person类的路径,指定其名称,用perprot标签给这个person类的属性赋值

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

<bean id="person" class="com.atguigu.bean.Person">
    <property name="age" value="21"></property>
    <property name="name" value="xm"></property>
</bean>

写一个测试类:获取beans.xml的路径,返回ioc容器,通过容器获取到实例对象的相关信息

public class MainTest {
public static void main(String[] args) {
//获取组件所在的位置及要实例化的信息,返回ioc容器
ApplicationContext applicationContext=new ClassPathXmlApplicationContext(“beans.xml”);
Person bean= (Person) applicationContext.getBean(“person”);
System.out.println(bean);
}
}

结果:Person{name=‘xm’, age=21}

注解方式:
person类保持不变
不需要beans.xml,写一个配置类MainConfig,使用@configuratipn注解表明这是一个配置类,在该配置类中实现一个方法,返回值为实例化的person,在该方法上添加@Bean注解,person的属性赋值是通过该person类的有参构造方法实现

//配置类==配置文件
@Configuration //告诉spring这是一个配置类
public class MainConfig {
//将方法的返回值放在容器中,方法名作为这个组件的id
@Bean //给容器中注册一个bean;类型为返回值的类型,id默认是方法名作为id
public Person person(){
return new Person(“li”,20);
}
}
写一个测试类:先获取配置类的所在位置,将其放在Application中,然后根据类型获取到实例化的对象
public static void main(String[] args) {
ApplicationContext applicationContext= new AnnotationConfigApplicationContext(MainConfig.class);
Person bean=applicationContext.getBean(Person.class);
System.out.println(bean);
}
}

结果:Person{name=‘li’, age=20}

测试2:

public class MainTest {
public static void main(String[] args) {
// 根据类型找到bean的名—获取person组件在ioc容器中的名字。—— 也就是之前beans.xml中用bean标签时的id值
String[] zujianname=applicationContext.getBeanNamesForType(Person.class);
for(String name:zujianname){
System.out.println(name);
}
}
}

结果:person

修改这个组件名:
方式一:直接修改配置类中的方法名,因为这个方法默认是以方法名作为id

@Bean
public Person person01(){
return new Person(“li”,20);
}

其他不变,测试结果是:person01

方式二:通过@Bean注解的value属性
@Bean(“person). //给容器中注册一个bean,类型为返回值类型,id是@Bean注解中的值——id默认是方法名
public Person person01(){
return new Person(“li”,20);
}
测试结果:person

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值