spring中常用的功能主要的是ioc和aop,此处主要说明下,实例注册和使用的方法,此为学习后的笔记记录总结
1.使用xml文件配置
在idea中创建maven工程,然后创建实例Person,然后在配置文件中配置bean,具体代码如下所示:,
public class Person { private String name; private Integer age; public Person(){ super(); } public Person(String name,Integer age){ super(); this.name=name; this.age=age; } public void setName(String name) { this.name = name; } public String getName() { return name; } public void setAge(Integer age) { this.age = age; } public Integer getAge() { return age; } @Override public String toString() { return "Person{" + "name='" + name + '\'' + ", age=" + age + '}'; }
<?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"> <bean id="user" class="com.enjoy.cap1.Person"> <property name="name" value="zhangsan"/> <property name="age" value="23"/> </bean> </beans>
import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; /** * 类说明 * * @Date: 2019/5/1 14:54 * @Version: 1.0 */ public class MainTest1 { public static void main(String []args){ ApplicationContext ac=new ClassPathXmlApplicationContext("beans.xml"); Person person= (Person) ac.getBean("user"); System.out.println(person); } }
以上是使用xml文件配置实现的bean的注册和使用,运行结果如下所示:
----------------------------------------------------------------------------
2.下面使用注解的方式进行bean的注册与使用
首先需要一个配置文件,本例使用MainConfig.java,实例同上Persion,测试文件MainTest.java文件
代码如下所示:
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; /** * 类说明 * * @Date: 2019/5/1 14:56 * @Version: 1.0 */ @Configuration public class MainConfig { @Bean public Person person(){ return new Person("lisi",20); } }
public class MainTest2 { public static void main(String []args){ ApplicationContext app=new AnnotationConfigApplicationContext(MainConfig.class); Person person= (Person) app.getBean("person"); System.out.println(person); } }
运行结果如下所示:
针对以上情况的特殊说明:
1)在获取bean的实例时,xml配置文件中给出class指定类的全路径名,id指定Bena的名称,是通过反射创建对象(Person)的实例,
创建时需要有构造器,否则会在运行时提示bean构造报错;或者使用默认的构造器,或者自己创建带参的构造器,在注入的时候设置构造器参数,
对象的创建是有spring容器来创建和管理,而不是对象本身,通过依赖注入完成对象的依赖关系。
2)使用注解方式实现bean的注册时,可以通过构造器的名字进行改写,或者通过bean标签指定bean的名字,而不是固定的实体类的构造器名字,
一般默认情况是构造器的名字。注解可以使用扫描配置或者import等标签配置使用其他标签
若是不想直接改方法的名字,可以在@Bean标签后面直接指定bean的名字,如下截图所示:
测试时使用注解中的测试类即可。此处不再进行测试说明。
3)以上是bean的注册使用说明,但若是类特别多,则配置起来就会特别繁琐,增加工作量,此时就可以通过扫描标签帮助注册bean实例,
代码说明如下所示;
@Configuration @ComponentScan(value = "com.enjoy.cap2") public class MainConfig { }
测试类的代码如下所示:
public class Test02 { @Test public void test(){ AnnotationConfigApplicationContext app=new AnnotationConfigApplicationContext(MainConfig.class); String [] names=app.getBeanDefinitionNames(); for (String name:names){ System.out.println(name); } } }
实体类不变,程序的运行结果如下所示;
4)在spring的容器中注册bean时默认是单例的,因为在整个容器中,通过id获取的时候,id值是唯一的,在容器启动时就创建并放到容器中(容器是一个map对象)
可以在配置文件中通过标签进行配置,在bean配置处,增加@Scope(“prototype”) ,可以实现多例,配置文件修改的代码如下所示:
测试类不变,在运行后会得出false的执行结果。
5)虽然spring容器中bean的注册默认是单例的,但可以通过标签@Lazy来指定获取对象时在进行bean实例的创建,而不是在容器启动时创建bean实例
不配置懒加载标签时,程序代码及运行结果如下所示;
package com.enjoy.cap4.config; import com.enjoy.cap1.Person; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; /** * 类说明 * * @Date: 2019/5/1 16:16 * @Version: 1.0 */ @Configuration public class MainConfig { @Bean public Person person(){ System.out.println("在容器中添加Person类的bean实例"); return new Person("zhangsan",11); } }
public class Test04 { public static void main(String []args){ AnnotationConfigApplicationContext app=new AnnotationConfigApplicationContext(MainConfig.class); System.out.println("IOC容器创建完成........"); app.getBean("person"); } }
程序的运行结果为;
若在配置文件中的bean实例上添加Lazy标签,代码如下所示: