【Spring框架05】Bean使用补充

【Spring框架05】Bean使用补充

思维导图

在这里插入图片描述

一、Spring IOC容器自动扫描管理bean

对于不确定所属于那层,可以使用:@Component

1.Dao层:@Repository

@Repository
public class UserDao {
    public void add(){
        System.out.println("UserDao>>>>>>>>>>>");
    }
}

2.Service层:@Service

@Service
public class UserService {
    @Resource
    private UserDao userDao;
    public void test() throws Exception{
        userDao.add();
    }
}

关于context.getBean默认(“当前类名小写”)

public class UserServiceTest {
    @Test
    public void test01() throws Exception {
        ApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");
        UserService userService = (UserService) context.getBean("userService");
        userService.test();
    }
}

3.视图控制层:@Controller

@Controller("lcy")
public class UserController {
    @Autowired
    private UserService userService;
    public void test() throws Exception {
        userService.test();
    }
}

在插入注解的时候自定义,测试中context.getBean调用定义的名字

public class UserServiceTest {
    @Test
    public void test02() throws Exception {
        ApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");
        UserController userController = (UserController)context.getBean("lcy");
        userController.test();
    }

}

4.配置spring.xml

<?xml version="1.0" encoding="UTF-8"?>
<!--使用的命名空间-->
<beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:context="http://www.springframework.org/schema/context"
        xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd">
<!--        包扫描目录下的所有bean对象-->
        <context:component-scan base-package="com.lcySpring"/>
</beans>

二、模拟用户登录流程

1.基本的框架配置

在这里插入图片描述

2.定义用户信息java类

public class User {
    private String username;
    private String password;

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}

2.dao:验证用户密码是否准确

@Repository
public class UserDao {
    private final String USERNAME="lmr";
    private final String PASSWORD="lcy";
    public User queryUserByName(String username){
        if(username==null||username==""){
            return null;
        }
        else {
            if(username.equals(USERNAME)){
                User user=new User();
                user.setPassword(PASSWORD);
                user.setUsername(USERNAME);
                return user;
            }
            else {
                return null;
            }
        }
    }
}

3.service:根据传入的用户名和密码进行格式判断并调用dao验证

@Service("aaa")
public class UserService {
    @Resource
    public UserDao userDao;
    public String  login(String username,String password) throws Exception{
       if(username==null||"".equals(username)){
           return "用户名为空";
       }
       if(password==null||"".equals(password)){
           return "密码为空";
       }
       User user = userDao.queryUserByName(username);
       if(user==null){
           return "用户不存在";
       }
       else{
           if(password.equals(user.getPassword())){
               return "登入成功";
           }
           else {
               return "登入失败";
           }
       }
    }
}

4.spring.xml中包扫描目录下的所有bean对象

<?xml version="1.0" encoding="UTF-8"?>
<!--使用的命名空间-->
<beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:context="http://www.springframework.org/schema/context"
        xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd">
<!--        包扫描目录下的所有bean对象-->
        <context:component-scan base-package="com.lcySpring"/>
</beans>

5.测试java类,进行用户登录模拟

public class UserServiceTest {
    @Test
    public void login() throws Exception{
        ApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");
        UserService userService = (UserService)context.getBean("aaa");
        String login =userService.login("lmr","lcy");
        System.out.println(login);
    }
}

三、Bean作用域

1.判断是否是单例

public class SpringScopeTest {
    @Test
    public void test01(){
        ApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");
        System.out.println(context.isSingleton("aaa"));
    }
}

2.可以通过修改xml文件中bean标签的scope进行修改

<?xml version="1.0" encoding="UTF-8"?>
<!--使用的命名空间-->
<beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:context="http://www.springframework.org/schema/context"
        xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd">
<!--        包扫描目录下的所有bean对象-->
        <context:component-scan base-package="com.lcySpring"/>
        <bean id="userService" class="com.lcySpring.service.UserService" scope="prototype"></bean>
</beans>

3.也可以通过标签设置

@Service("aaa")
@Scope("prototype")

4.设置懒加载

用到的时候调用就好了

 <bean id="userService" class="com.lcySpring.service.UserService" lazy-init="true"></bean>

四、Bean的生命周期

1.初始化监听

(1)在配置文件中通过指定init-method属性来完成

<!--        监听并创建-->
        <bean id="accountDao" class="com.lcySpring.dao.AccountDao"  init-method="init"></bean>

这里的init对应的是AccountDao中初始化的方法名

public class AccountDao implements InitializingBean {
    public void init(){
        System.out.println("AccountDao>>>>>>>>>>>>>>>>>init");
    }

    @Override
    public void afterPropertiesSet() throws Exception {
        System.out.println("AccountDao>>>>>>>>>>>>>>>>>init");
    }
}

(2)实现org.springframework.beans.factory.InitializingBean接口

public class AccountDao implements InitializingBean {}

2.销毁

(1)destroy-method=“destroy”
在xml文件中配置

<bean id="accountDao" class="com.lcySpring.dao.AccountDao" destroy-method="destroy"></bean>

(2)需要一个抽象的环境AbstractApplicationContext
设置测试类

public class AccountDaoTest {
    @Test
    public void test01() throws Exception{
        AbstractApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");
        AccountDao accountDao = (AccountDao)context.getBean("accountDao");
        context.close();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值