service内定义枚举其他service怎么调用
可以通过在其他service中实例化该枚举,然后调用相应的枚举方法。代码如下:
```java
// 在其他service中实例化该枚举
MyEnum myEnum = MyEnumvalueOf("VALUE1"); //根据字符串来得到对应的值
// 调用相应的枚举方法
myEnumgetValue(); //获取对应值
myEnumgetDescription(); //获取对应文本信息
```
1、添加util方法:
package comhzcutil;
import orgspringframeworkbeansBeansException;
import orgspringframeworkcontextApplicationContext;
import orgspringframeworkcontextApplicationContextAware;
/
普通类调用Spring注解方式的Service层bean
Created by HZC on 2015/10/21
/
public class SpringBeanFactoryUtils implements ApplicationContextAware {
private static ApplicationContext appCtx;
/
此方法可以把ApplicationContext对象inject到当前类中作为一个静态成员变量。
@param applicationContext ApplicationContext 对象
@throws BeansException
@author hzc
/
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
appCtx = applicationContext;
}
/
获取ApplicationContext
@return
@author hzc
/
public static ApplicationContext getApplicationContext() {
return appCtx;
}
/
这是一个便利的方法,帮助我们快速得到一个BEAN
@param beanName bean的名字
@return 返回一个bean对象
@author hzc
/
public static Object getBean(String beanName) {
return appCtxgetBean(beanName);
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
2、在spring的配置文件xml中添加
<bean id="springBeanFactoryUtils" class="comhaierutilSpringBeanFactoryUtils"/>
1
1
3、service方法
package comhzcserviceimpl;
import orgslf4jLogger;
import orgslf4jLoggerFactory;
import orgspringframeworkstereotypeService;
import orgspringframeworktransactionannotationTransactional;
import javaxannotationResource;
import javamathBigDecimal;
import javautilDate;
import javautilList;
/
Created by HZC on 2015/10/20
/
@Service("ckPayoffService")
public class CKPayoffServiceImpl implements ICKPayoffOrderService {
private static final Logger log = LoggerFactorygetLogger(CKPayoffServiceImplclass);
/
测试
@author HZC
@createDate 2015-10-21
/
@Override
@Transactional
public void calculatePayoff() {
Systemoutprintln("--------------------------gogogogogo---------------");
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
4、使用
CKPayoffServiceImpl ckps = (CKPayoffServiceImpl) SpringBeanFactoryUtilsgetBean("ckPayoffService");
ckpscalculatePayoff();
1
2
1
2
在普通类中就可以调用service实例方法了,执行calculatePayoff方法,打印“————————–gogogogogo—————”
1 可以通过ApplicationContext的实例来查找。
2 ApplicationContext 的实例 可以通过实现 一个ApplicationContextAware接口,并将实现ApplicationContextAware接口的类做为一个Bean, Spring在装配过程中,会装配ApplicationContext。
3你的listener启动的顺序,应该晚于spring的listener启动。
对于很多服务来说,在同一个服务器上只能运行一个实例,那么通过什么方法来保证程序同一时刻只有一个实例运行呢?通过编写shell脚本来管理程序的启动、停止是个不错的方法。在启动时,shell脚本会创建进程标识文件(存储正在运行实例的pid)以表明已经有实例在运行,如果文件已存在,则说明已有实例在运行,不需要做任何事;在退出时,shell脚本会删除进程标识文件,表明没有实例运行。
shell脚本管理方法在应用程序之上再包了一层,那么能不能直接在程序开始运行时自己判断是否有实例在运行呢,答案是肯定的。原理其实差不多,还是要借助公用资源---文件,当然不仅仅是文件而已,还需要文件锁的支持。大致思路是这样的:程序在开始运行时对特定文件进行加锁(不存在则创建),如果加锁成功,则实例开始运行;如锁已经被占有,则说明已经有实例在运行,则程序直接退出;另外在实例运行完毕后对文件的锁也随着丢掉了。这样就能保证每次只有一个程序实例在运行。
具体步骤如下:
1. 打开特定文件(如/var/run/mydaemonpid),如不存在则创建之;
2. 使用fcntl对文件整个区域加劝告锁。
3. 如果加锁成功,则继续执行后续代码,并将pid写入文件;如加锁不成功,说明已经有实例在运行,直接退出。
实现示例:
#include <stdioh>
#include <stdlibh>
#include <unistdh>
#include <fcntlh>
#include <printfh>
#include <stringh>
#include <errnoh>
#include <sys/stath>
#define LOCKFILE "/var/run/mydaemonpid"
#define LOCKMODE (S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH)
/ set advisory lock on file /
int lockfile(int fd)
{
struct flock fl;
fll_type = F_WRLCK; / write lock /
fll_start = 0;
fll_whence = SEEK_SET;
fll_len = 0; //lock the whole file
return(fcntl(fd, F_SETLK, &fl));
}
int already_running(const char filename)
{
int fd;
char buf[16];
fd = open(filename, O_RDWR | O_CREAT, LOCKMODE);
if (fd < 0) {
printf("can't open %s: %m\n", filename);
exit(1);
}
/ 先获取文件锁 /
if (lockfile(fd) == -1) {
if (errno == EACCES || errno == EAGAIN) {
printf("file: %s already locked", filename);
close(fd);
return 1;
}
printf("can't lock %s: %m\n", filename);
exit(1);
}
/ 写入运行实例的pid /
ftruncate(fd, 0);
sprintf(buf, "%ld", (long)getpid());
write(fd, buf, strlen(buf) + 1);
return 0;
}
int main(int argc, char argv[])
{
if (already_running(LOCKFILE))
return 0;
/ 在这里添加工作代码 /
printf("start main\n");
sleep(100);
printf("main done!\n");
exit(0);
}
转载
(1)ActivityManagerService 创建并初始化 BatteryStatsService,并传入耗电量记录文件batterystatsbin;
(2)BatteryStatsService 在内部创建 BatteryStatsImpl 实例,并传入耗电量记录文件batterystatsbin;
(3)ActivityManagerService 执行 mBatteryStatsServicegetActiveStatistics()readLocked();导致 BatteryStatsService 的 BatteryStatsImpl 加载batterystatsbin数据;
(4)在PowerUsageSummary计算App耗电量时,PowerUsageSummary从BatteryStatsService 中获取BatteryStatsImpl 实例,从而获得App的相关数据。
首先, 你要先把你的WS服务启动起来,就是>
以上就是关于service内定义枚举其他service怎么调用全部的内容,包括:service内定义枚举其他service怎么调用、spring基于注解的普通类怎么调用@Services注解的service方法、各位朋友们,在用spring注解时,listener中怎么获取注解的@service,谢谢啊等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)