标签:val 模式 传统 bean img png public 宠物 pre
传统的Spring做法是使用.xml文件来对bean进行注入或者是配置aop、事物,这么做有两个缺点:
controllerc层(控制层)
,使用@Controller
注解标识一个controller后,表示将该controller交给spring容器来管理,spring容器中会存在一个controller实例。@Service
注解标识一个业务层bean时,表示将该bean交友spring容器管理,当controller层需要调用service时,只需在controller层声明service变量,然后注入即可dao层(持久层)
。实际开发中则用在操作数据库的dao实现类和model上。@Controller
、@Service
、Repository
,当你不知道一个类要用什么来注解时,就用它scope
属性是一个意思,它代表这一个bean的作用域pojo类
属性赋值时使用,如果注解标识在属性上面则sspring底层是用java反射机制来给属性赋值,如果注解标识在setter方法上,则调用set方法来赋值,与配置文件中的<property>
标签注入时一样的效果。@value
很像,当在一个bean中要注入另外一个bean时就用这个注解,同样是可以在属性上,也可以在setter方法上去标识。它有属性name
,可以用来指定注入的bean,使用byName的自动注入策略,‘type‘属性可以用来指定注入的类型,使用byType自动注入策略,当该类型有两个或以上实例时就会出错。如果不指定属性的话,默认使用反射机制byName的自动注入策略。byType
装配依赖对象,默认情况下它要求依赖对象必须存在,不可为null,可以通过设置它的属性required
为false
,来使依赖对象允许为空。如果想通过byName
来装配依赖对象,可以与@Qualifier
注解结合使用。@Qualifier:这个注解常与@Autowired
结合使用,在自动装配时可以用来支持byName
装配策略
在使用注解之前,要在spring配置文件中插入
它表示扫描这个路径下的包和类的注解,即表示这个路径下的类可以使用注解
User
@Component
@Scope("prototype")
public class User {
}
UserController
@Controller
public class UserController {
}
UserService
@Service("userService")
public class UserServiceImpl implements UserService {
}
UserDao
@Repository("userDao")
public class UserDaoImpl implements UserDao {
}
测试结果
User
@Component
@Scope("prototype")
public class User {
@Value("小明")
private String name;
private String sex;
public User() {
super();
System.out.println("User类构造器被调用");
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
System.out.println("调用setName方法");
}
public String getSex() {
return sex;
}
@Value("男")
public void setSex(String sex) {
this.sex = sex;
System.out.println("调用setSex方法");
}
@Override
public String toString() {
return "User [name=" + name + ", sex=" + sex + "]";
}
}
测试结果
Pet
@Component
public class Pet {
@Value("1000")
private int id;
//宠物类型
@Value("小狗")
private String type;
@Override
public String toString() {
return "Pet [id=" + id + ", type=" + type + "]";
}
}
User
@Component
@Scope("prototype")
public class User {
@Value("小明")
private String name;
@Value("男")
private String sex;
@Resource
private Pet pet;
@Override
public String toString() {
return "User [name=" + name + ", sex=" + sex + ", pet=" + pet + "]";
}
}
测试结果
主体代码与3相同,稍做修改即可,结果也一样
标签:val 模式 传统 bean img png public 宠物 pre
原文地址:https://www.cnblogs.com/hamawep789/p/10792199.html