先贴上目录结构:
1、配置文件getBean
传统的spring,建立Person实体类,beans.xml文件,在里面指定bean,指定id,property指定实体类的name和age,实例类记得写上get,set方法,有参构造函数和无参构造函数,toString方法。之后写个mainTest类就可以测试从配置文件获取bean。下面附上代码:
<?xml version="1.0" encoding="UTF-8"?> <beans default-lazy-init="true" 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" xmlns:context="http://www.springframework.org/schema/context"> <bean class="com.alibaba.bean.Person" id="person" scope="singleton"> <property name="age" value="18"></property> <property name="name" value="张三"></property> </bean> <!--包扫描,只要标注:@Controller,@Service,@Repository,@Component都能扫到--> <!--1、可以在配置文件配置扫描路径 2、可以用注解@ComponentScan --> <!-- <context:component-scan base-package="com.alibaba"></context:component-scan>--> </beans>
/** * 人 * * @author keying * @date 2021/6/24 */ public class Person { private String name; private Integer age; @Override public String toString() { return "Person{" + "name='" + name + '\'' + ", age=" + age + '}'; } public Person() { } public Person(String name, Integer age) { this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } }
main方法getBean:通过classPathXmlApplicationContext对象加载配置文件,之后getBean强转成之前写的person实体类,打印出来【Person{name='张三', age=18}】。
public class MainTest { public static void main(String[] args) { //配置文件加载对象 ApplicationContext applicationContext = new ClassPathXmlApplicationContext("beans.xml"); Person person = (Person)applicationContext.getBean("person"); System.out.println(person.toString()); } }
2、通过DI注解getBean
文章开头的图有一个 BeanConfig类,我们在里面加上注解@Configuration,代表当前类是配置文件,和@Bean注解,代表当前对象交给spring容器管理,若@Bean没有指定value值,则当前对象的id为方法名。
/** * 配置文件 * @Configuration 告诉spring这是一个配置类 * * * @author keying * @date 2021/6/24 */ @Configuration public class BeanConfig { /** * @Bean吧对象注入给spring容器 * 1、id默认是方法名,value方法可以指定方法名 * @return Person */ @Bean(value = "person") public Person getPerson(){ return new Person("李四",19); } }
然后在main方法里通过配置文件获取对象:用AnnotationConfigApplicationContext获取刚刚写的配置类BeanConfig,在获取对象并打印出来【Person{name='李四', age=19}】,还可以用下面的getBeanNamesForType方法打印他的id;
public class MainTest { public static void main(String[] args) { //配置文件加载对象 ApplicationContext applicationContext = new ClassPathXmlApplicationContext("beans.xml"); Person person = (Person)applicationContext.getBean("person"); System.out.println(person.toString()); //注解加载对象 ApplicationContext applicationContextAnnotation = new AnnotationConfigApplicationContext(BeanConfig.class); Person personByAnnotation = applicationContextAnnotation.getBean(Person.class); System.out.println(personByAnnotation.toString()); String[] typeName = applicationContextAnnotation.getBeanNamesForType(Person.class); for (String type : typeName) { System.out.println(type); } } }
打印结果: