1.创建对象
Spring创建对象有两种配置方式:xml配置文件和注解
1.1配置文件
package com.xianoupeng.bean;
//员工类
public class Emp {
private String name;
private int age;
private Dept dept;
public Emp() {
System.out.println("Emp 无参构造被调用");
}
public Emp(String name, int age, Dept dept) {
this.name = name;
this.age = age;
this.dept = dept;
System.out.println("Emp 有参构造被调用");
}
public void setName(String name) {
System.out.println("setName被调用");
this.name = name;
}
public void setAge(int age) {
System.out.println("setAge被调用");
this.age = age;
}
public void setDept(Dept dept) {
System.out.println("setDept被调用");
this.dept = dept;
}
@Override
public String toString() {
return "Emp{" +
"name='" + name + '\'' +
", age=" + age +
", dept=" + dept +
'}';
}
}
使用bean标签 指定想要spring管理的类,spring会调用类的无参构造方法来创建对象并将其存放在ioc容器中。(如果没有无参构造将报错)
//class属性指明要创建的类的全类名,id属性指明该对象的名称
<bean id="emp" class="com.xianoupeng.bean.Emp"></bean>
测试:
@Test
public void test(){
ApplicationContext context=new ClassPathXmlApplicationContext("spring.xml");
}
结果:
1.2注解创建对象
spring使用下面四个注解来自动创建对象。
@Component
: 通用注解@Service
: 用于对业务逻辑类的注解(Service层)@Controller
: 用于对控制器类的注解@Repository
:用于dao层类的注解
四个注解在作用上没任何却别,只是语义上有区别而已,建议按照语义使用,不按照指定层次使用也不会报错。
这四个注解还需要配合一个配置使用:
<context:component-scan base-package="com.xianoupeng.bean"></context:component-scan>
该配置的作用是开启注解扫描,base-package属性指定要扫描的包,注意指定包的子包也都会被扫描。开启了该注解后,spring才会去对应包下的类上去寻找是否有上面四种注解,如果有其中的注解,则创建响应的对象。如果不开启注解扫描,就算写了上面的注解,spring也不会知道,也就不会创建对象。