专业的编程技术博客社区

网站首页 > 博客文章 正文

Java 线程基础(java线程用法)

baijin 2024-08-15 16:54:11 博客文章 4 ℃ 0 评论

1.什么是Spring的IOC

Spring 是一个轻量级控制反转(IoC)和面向切面(AOP)的容器框架,

解决了企业应用开发的复杂性,适用范围是一切 Java 应用。

IOC:控制反转,指的是spring以前,对象都是自己new去创建,

现在通过spring的配置文件,由spring容器负责创建,控制权发生了转移,所以叫控制反转。

IOC别名,也叫DI 就是依赖注入,由容器动态的将某种依赖关系注入到组件中。

2.新建user实体类

public class SysUser {

private Integer id;

private String username;

private String telephone;

... set get 省略

}

3.resources下新建一个spring配置文件ApplicationContext.xml:

<bean id="user" class="com.org.pojo.SysUser">

<property name="id" value="1"></property>

<property name="username" value="张三"></property>

<property name="telephone" value="13898987676"></property>

</bean>

4.获取XML中的Bean

4.1 通过id和类型获取Bean:

@RunWith(SpringJUnit4ClassRunner.class)

@ContextConfiguration({"/ApplicationContext.xml"})

public class TestSpring {

@Test

public void testGetBeanById(){

// 通过id获取Bean

ApplicationContext ac = new ClassPathXmlApplicationContext("ApplicationContext.xml");

SysUser user = (SysUser) ac.getBean("user");

System.out.println(user); // SysUser [id=1, username=张三, telephone=13898987676]

}

@Test

public void testGetBeanByType(){

// 通过类型获取Bean

ApplicationContext ac = new ClassPathXmlApplicationContext("ApplicationContext.xml");

SysUser user = ac.getBean(SysUser.class);

System.out.println(user); // SysUser [id=1, username=张三, telephone=13898987676]

}

}

4.2 通过 spring 的 @Autowired 注解自动注入:根据类型注入

@Autowired

private SysUser user;

@Test

public void testAutowired(){

System.out.println(user); //SysUser [id=1, username=张三, telephone=13898987676]

}

5 .Seivice注解

新建UserService接口 和 UserServiceImpl 实现类,并实现该接口

public interface UserService {

SysUser getUser(int id);

}

@Service("UserServiceImpl")

public class UserServiceImpl implements UserService{

public SysUser getUser(int id) {

// 模拟数据库查询,根据id 获取一条数据

SysUser sysUser = new SysUser();

sysUser.setId(id);

sysUser.setTelephone("13899990000");

sysUser.setUsername("李四");

return sysUser;

}

}

进行测试:


@Test

public void test(){

// 使用spring之前,New对象

UserService userService = new UserServiceImpl();

System.out.println(userService.getUser(1));

}

在XML中进行配置:


<bean id="userService" class="com.org.service.impl.UserServiceImpl">

测试:


@Test

public void test(){

// 使用spring的 xml配置

ApplicationContext ac = new ClassPathXmlApplicationContext("ApplicationContext.xml");

UserService userService1 = (UserService) ac.getBean("userService");

System.out.println(userService1.getUser(1)); // SysUser [id=1, username=李四, telephone=13899990000]

}

Spring除了在XML中进行配置,还可以进行注解配置:

applicationContext.xml 中配置 <context:component-scan base-package="com" />

配置完这个标签后,spring就会去自动扫描base-package对应的路径或者该路径的子包下面的java文件,如果扫描到文件中带有@Service,@Component,@Repository,@Controller等这些注解的类,则把这些类注册为bean。

<context:component-scan base-package="com"/>

注解测试:

@Autowired

private UserService userService;

@Test

public void test(){

// 使用注解

System.out.println(userService.getUser(1)); // SysUser [id=1, username=李四, telephone=13899990000]

}

6.@Autowired和@Qualifier使用

如果有其它实现类也实现了 UserService 接口,@Autowired private UserService userService; 怎么知道注入的是哪个实现类?

新建是一个实现类 NewUserServiceImpl 实现 UserService 接口


@Service("NewUserServiceImpl")

public class NewUserServiceImpl implements UserService {

public SysUser getUser(int id) {

// 模拟数据库查询,根据id 获取一条数据

SysUser sysUser = new SysUser();

sysUser.setId(id);

sysUser.setTelephone("13888888888");

sysUser.setUsername("王五");

return sysUser;

}

}

再次运行test方法,控制台报错:

NoUniqueBeanDefinitionException: No qualifying bean of type 'com.org.service.UserService' available: expected single matching bean but found 2:

newUserServiceImpl,userServiceImpl

NoUniqueBeanDefinitionException 异常,就是说 bean 不是唯一的。我们可以使用 @Qualifier 注解 和 @Autowired 保证唯一性。

@Autowired

@Qualifier("NewUserServiceImpl")

private UserService userService;

@Test

public void test(){

// 使用注解

System.out.println(userService.getUser(1)); // SysUser [id=1, username=王五, telephone=13888888888]

}

spring 的 @Autowired 是根据类型注入的,byType 通过参数的数据类型自动自动装配

7.@Resource 注解

我们也可以使用 @Resource 注解 实现 @Autowired和 @Qualifier 连用的效果

@Resource是属于J2EE ,JDK1.6支持的注解byName 通过参数名 自动装配。

@Resource(name = "UserServiceImpl")

private UserService userService;

@Test

public void test(){

// 使用注解

System.out.println(userService.getUser(1)); // SysUser [id=1, username=李四, telephone=13899990000]

}

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表