Spring IOC容器之bean对象创建

2023-05-09 11:31:00 浏览数 (1)

1.注解实现

@Component和其衍生注解,如@Service、@Repository、@Controller等。这些注解都是通过spring的组件扫描机制来扫描并创建对象的

代码语言:javascript复制
@Service
public class UserService {
    @Autowired
    private UserMapper userMapper;
    //新增
    public Boolean add(User user){ return userMapper.add(user);}
    //删除
    public Boolean del(int id){return userMapper.del(id);}
    //修改
    public Boolean edit(User user){return userMapper.edit(user);}
    //查找全部
    public List<User> findall(){return userMapper.findall();}
    //查找单个
    public User findone(int id){return  userMapper.findone(id);}
    //验证
    public User login(User user){return userMapper.login(user);}
}

2.xml配置实现

代码语言:javascript复制
<bean id="user" class="com.example.User"/>

以上为无参构造实现方式(默认)

对于有参构造对象的创建还需要根据具体注解如@Value或者xml语法来实现

一、

代码语言:javascript复制
@Service
public class UserService {
    @Autowired
    private UserMapper userMapper;
    @Value("${user.age}")
    public String age;
    @Value("Yongwang Dong")
    public String name;
}

如上使用@Autowired、@Value注解来注入三个属性值,其中@Value使用了 ${}语法来引用配置文件中的值

二、

xml有参构造创建对象有三种实现方式:

1.index下标方式

代码语言:javascript复制
<bean id="user" class="com.hardy.pojo.User">
<constructor-arg index="0" value="hardy"/>
</bean>

2.参数类型匹配(容易冲突)

代码语言:javascript复制
<bean id="user" class="com.hardy.pojo.User">
<constructor-arg type="java.lang.String" value="hardy"/>
</bean>

3.直接根据参数名称匹配

代码语言:javascript复制
<bean id="user" class="com.hardy.pojo.User">
<constructor-arg name="name" value="hardy3"/>
</bean>

小结:Spring将类对象的创建、管理、分配统一交由ioc实现,解决不同组件直接的依赖关系,降低系统耦合性,使得程序员更专注于业务代码;IOC(控制反转),控制:Spring开始控制对象,反转:程序本事不需创建对象,而是被动接收对象。

0 人点赞