Spring框架中的bean管理(XML和注解及属性的注入)

Spring框架中IOC就是将创建对象的权力反转给Spring框架,我们无需自己创建对象,直接在Spring框架的容器中获取即可。

bean中配置的就是需要让Spring管理的类。


XML的bean管理 

先写个“HelloWorld”:

    
        
        
        
        
    

上面代码的含义就是创建单例的User对象,并且实现了依赖注入。bean依赖注入的两种方式:一种是属性的set方法注入(property标签),通过Java反射机制(所以前提是User类中必须存在当前属性的set方法),为属性赋值。另一种是构造方法的注入(constructor-arg标签),通过类中的构造方法赋值。

以上代码描述了通过bean标签实现通过Spring创建对象并赋值,称为依赖注入(Dependency Injection)DI。

在实际开发中并没有如此简单,例如在一个类中调用另一个类,使用bean标签该如何处理呢?

public class UserService {
    UserDao userDao;
    public void saved(){
        userDao.save();
    }
}
    
    
        
    

如上我们新建UserDao类和UserService类,在UserService类中调用UserDao类中的方法,使用bean管理这两个类。

使用XML我们发现工作量太大,如果模块很多,那每次加入一个模块就要添加一个bean。


使用注解进行bean管理 

在Spring中配置当前标签,就可以通过注解,自动扫描指定包下的类,可自动解析注解。

模型类: 

@Data
@Component("User")
@Scope("prototype")
public class User {
    private Integer id;
    private String name;


}

数据访问层: 

@Data
@Repository("userDao")
public class UserDao {
    public void save() {
        System.out.println("保存成功!");
    }
}

Service层: 

@Data
@Service("userService")
public class UserService {
    @Autowired   //属性的注入
    @Qualifier("userDao")
    UserDao userDao;
    public void saved(){
        userDao.save();
    }
}

各层类使用不同的注解标签和名字。在Spring框架中,一般把由Spring框架管理创建的对象称为一个bean对象,与我们普通的对象不同,因为Spring框架可以进行功能上的增强。

补充:Spring为了每层更加清晰,(为了后续的扩展功能,在不同层使用不同的注解标记)

模型类:@Compontent

Service层:@Service 

数据访问层:@Repository

Spring中注解的自动注入:

两种方式:

1,@Autowired Spring框架中提供的注解标签,可以提供两种方式进行属性注入。

①bean名称注入 @Qualifier(value="bean名称")

@Data
@Service("userService")
public class UserService {
    @Autowired   //属性的注入
    @Qualifier("userDao")
    UserDao userDao;
    public void saved(){
        userDao.save();
    }
}
@Data
@Repository("userDao")
public class UserDao {
    Integer id;
    String name;
    public void save() {
        System.out.println("保存成功!");
    }
}

②属性类型注入,如果没有指定名称,那么就是属性类型去容器中查找对应类型对象(常用)

@Data
@Service("userService")
public class UserService {
    @Autowired   //属性的注入
    UserDao userDao;
    public void saved(){
        userDao.save();
    }
}
@Data
@Repository
public class UserDao {
    Integer id;
    String name;
    public void save() {
        System.out.println("保存成功!");
    }
}

 2,@Resource JDK提供的注解标签

没有给定指定名称,就通过类型查找注入,若给定,则通过名称注入

@Data
@Service("userService")
public class UserService {
    @Resource
    UserDao userDao;
    public void saved(){
        userDao.save();
    }
}
@Data
@Repository
public class UserDao {
    Integer id;
    String name;
    public void save() {
        System.out.println("保存成功!");
    }
}

你可能感兴趣的:(后端,JAVA,Spring,spring,java,后端)